就是每次都要到内存上读取数据,不能直接用寄存器的数据(第一次直接取自内存然后放在寄存器,第二次编译器就会优化成使用寄存器的值)
并不解决多线程的事
https://liam.page/2018/01/18/volatile-in-C-and-Cpp/
被 volatile
修饰的变量,在对其进行读写操作时,会引发一些可观测的副作用。而这些可观测的副作用,是由程序之外的因素决定的。
因此我们讲,在 C/C++ 中,对 volatile
对象的访问,有编译器优化上的副作用:
volatile
对象的访问之前。这里提及的「不允许被优化」表示对 volatile
变量的访问,编译器不能做任何假设和推理,都必须按部就班地与「内存」进行交互。因此,上述例中「复用寄存器中的值」就是不允许的。
volatile
不能解决多线程中的问题。volatile
只在三种场合下是合适的。
setjmp
和 longjmp
)相关的场合。原文:https://www.cnblogs.com/l2017/p/10588252.html