C/C++ 中 volatile 关键字有什么用?声明变量volatile
和不声明为volatile
有什么区别?
最佳答案
变量上的 volatile
限定符告诉编译器,无论何时访问此变量,它的值都必须从内存中加载,并且编译器可能不会从它以前的存储中假设该值生效了。
因此,当您遇到变量可能具有当前“执行线程”(广义上)无法预见的值的情况时,它是合适的。这包括:
- 硬件寄存器
- 信号处理程序中的状态变量
- 之后使用的实时变量
goto
等意外跳转,switch
/case
,或者,更重要的是,setjmp
/longjmp
.
volatile
对于对访问未互斥的线程共享变量的原子访问也是必要的(但还不够!)。为此,volatile
绝对不足以保证原子访问,即使它只是为了读取。为此,您必须使用当前 C 标准 C99 的抽象机器未建模(或接口(interface))的 CPU 特殊指令。下一个标准 C1X 应该有这样的原语。
关于c++ - volatile关键字有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5190091/