【发布时间】:2013-04-22 00:09:12
【问题描述】:
我最近在看Crack Code Interview这本书,但是第257页有一段让我很困惑:
线程是进程的特定执行路径;当一个线程修改进程资源时,该更改立即对兄弟线程可见。
IIRC,如果一个线程对变量进行了更改,更改将首先保存在 CPU 缓存中(例如 L1 缓存),并且除非变量声明为 volatile,否则不会保证与其他线程同步。
我说的对吗?
【问题讨论】:
-
如果你在谈论 volatile,你也需要说明语言。在 C 和 C++ 中,volatile 对于线程同步通常没用,而在 Java 中它很有用。
-
@doomster,谢谢,但我相信
volatile在 Java 和 C++ 中扮演同样的角色,你能解释一下为什么它与你的不同吗? -
它们的意图相似,但不等同。在 Java 中,您对它们在多线程程序中的行为有非常具体的保证。对于 C++,请参阅 stackoverflow.com/q/2484980/1968182。
-
@MrROY:在 C 和 C++ 中,
volatile没有关于线程的定义语义。在 Java 中,确实如此。在 C 或 C++ 中没有线程同步情况,volatile就足够了,而在 Java 中,有。
标签: multithreading operating-system thread-safety