就是每次都要到内存上读取数据,不能直接用寄存器的数据(第一次直接取自内存然后放在寄存器,第二次编译器就会优化成使用寄存器的值)
并不解决多线程的事
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