【发布时间】:2013-03-18 06:33:04
【问题描述】:
我读到 java volatile 是顺序一致的,但不是原子的。 对于原子性,java 提供了不同的库。
有人可以用简单的英语解释两者之间的区别吗?
(我相信问题范围包括 C/C++,因此添加这些语言标签以获得更多的受众。)
【问题讨论】:
-
我不认为
volatile在 C/C++ 中提供与在 Java 中相同的保证。特别是,我不认为它在 C 中提供了您所谓的顺序一致性(即内存围栏适用于其他变量)-TBC。 -
@assylias 我并不是说 volatile 在 C/C++ 中具有相同的含义。我确信它不会。我指的是 c/C++ 和 Java 之间常见的“顺序一致性和原子性”的概念。在 C/C++ 中,volatile 关键字停止了变量使用的优化,并且不用于维护在使用 volatile 变量的操作之前指定的操作之间的顺序一致性。