在浏览有关多线程编程的许多资源时,通常会提到 volatile 说明符。 很明显,至少在 C/C++ 和 Java(1.4 及更早版本)中,使用此关键字不是实现多线程同步的可靠方法。 这是维基百科列出的(没有解释如何)作为此说明符的典型用法:-
- 允许访问内存映射设备
- 允许在 setjmp 和 longjmp 之间使用变量
- 允许在信号处理程序中使用变量
- 忙着等
我可以开始看到这个说明符在上面列出的用法中的作用,但是由于我还没有完全理解这些领域中的每一个,所以我无法弄清楚这个说明符在这些中的每一个中的行为用法。
谁能解释一下?
最佳答案
您的问题在技术上被称为“一 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/