[C/C++] volatile关键词

Volatile关键字

Volatile关键词的第一个特性:易变性

所谓的易变性,在汇编层面反映出来,就是两条语句,下一条语句不会直接使用上一条语句中volatile变量的寄存器内容,而是重新从内存中读取

Volatile关键词的第二个特性:不可优化性

volatile告诉编译器,不要对我这个变量进行各种激进的优化,甚至将变量直接消除,保证程序员写在代码中的指令,一定会被执行。

Volatile关键词的第三个特性:顺序性

Volatile变量间的操作,不会被编译器打乱。
Volatile变量与non-Volatile变量之间的相对顺序,是可能被编译器打乱的。

哪怕将所有的变量全部都声明为volatile,就算杜绝了编译器的乱序优化;
但是针对生成的汇编代码,CPU仍有可能会乱序执行,导致程序依赖的逻辑出错,volatile对此无能为力;

void thread1() {
    // do something
    togo = true;
}

void thread2() {
    while (!togo)
        ;
    // do something
}

针对这个多线程的应用,真正正确的做法,是构建一个happens-before语义。

参考文献

http://hedengcheng.com/?p=725

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值