[C/C++] volatile关键词

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sai_j/article/details/82727454

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

猜你喜欢

转载自blog.csdn.net/sai_j/article/details/82727454