c++ - volatile关键字有什么用?

标签 c++ c

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/

相关文章:

c++ - Netbeans 显示 unix 系统调用错误 "getcontext"

c - GCC 和生成文件 : Only show errors and warnings

c - c 中的 & 符号错误和生命周期

c++ - 使用 GLuint 而不是 unsigned int 有什么好处?

C++自定义文本代码输入解析器

c - 运行时无输出 行计数

objective-c - 将ansi c导入iphone项目后代码运行非常缓慢

c++ - 我正在尝试将 3D 模型查看器集成到我的 GUI 中,但还没有找到一个可以让我轻松完成此操作的库。有什么建议么?

c++11 聚合初始化之前的值初始化

c++ - 将程序从 C 重写为 C++ 时格式化输出