java - C/C++/Java中volatile说明符的使用

标签 java c++ volatile

在浏览有关多线程编程的许多资源时,通常会提到 volatile 说明符。 很明显,至少在 C/C++ 和 Java(1.4 及更早版本)中,使用此关键字不是实现多线程同步的可靠方法。 这是维基百科列出的(没有解释如何)作为此说明符的典型用法:-

  1. 允许访问内存映射设备
  2. 允许在 setjmp 和 longjmp 之间使用变量
  3. 允许在信号处理程序中使用变量
  4. 忙着等

我可以开始看到这个说明符在上面列出的用法中的作用,但是由于我还没有完全理解这些领域中的每一个,所以我无法弄清楚这个说明符在这些中的每一个中的行为用法。

谁能解释一下?

最佳答案

您的问题在技术上被称为“一 jar 蠕虫”! 对于 c/c++(我不能评论 java)
您可以非常粗略地将 volatile 概括为指示编译器说“请不要优化它”,但专业人士之间有很多争论,至于它是否
一)At all useful for kernel level code <-根据反馈澄清编辑
b) Even implemented correctly by most compilers.

此外,永远不要将它用于多线程编程和 here's a very good explanation as to why

=编辑= 有趣的是,它的值(value)。 Dennis Ritchie 反对包含(以及 const)细节 here

关于java - C/C++/Java中volatile说明符的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1063133/

相关文章:

java - 使用内置 JavaScript 引擎时自动为未定义的方法添加前缀 `Math.`?

c++ - MinGW g++ 在 powershell 中不创建输出

java - 使用声音的标题而不是数字位置将声音保存为铃声

java - autoComplete completeMethod 在对话框中不起作用

c++ - C++ 中的 void 算术

CUDA 应用程序的 C++ volatile 和运算符重载

C volatile 变量和高速缓存

java - 类变量以外的对象的易变性

java - 基于Capsul的Java编程下设置非基本值的案例

c++ - 插入方法未正确比较