如果我理解正确,volatile会导致内存屏障,使本地内存与主内存同步。这在多核机器上非常有用。
当多线程应用程序在单核计算机上运行时,是否会发生此内存同步?
答案 0 :(得分:3)
当多线程应用程序在单核计算机上运行时,是否会发生此内存同步?
是。 volatile
会导致读取和/或写入内存屏障,并在另一个线程访问同一volatile
字段时确保“之前发生”关系。见this tutorial。它确保将对本地CPU高速缓存的更改写入主内存,并且对主内存的更改将使任何CPU高速缓存页无效。
这在单处理器盒上不那么重要,因为只需要担心一个CPU缓存。但是,重要的是要认识到volatile
的“先发生”保证仍然很重要。它们可以防止即使只有一个CPU因为多个线程的时间切片而可能发生的竞争条件。
答案 1 :(得分:1)
当多线程应用程序在单核计算机上运行时,是否会发生此内存同步?
是