如果我理解正确的话, volatile 会导致内存屏障,使本地内存与主内存同步。这在多核机器上非常有用。
当多线程应用程序在单核机器上运行时,会发生这种内存同步吗?
最佳答案
Will this memory synchronisation happen when a multi threaded application is running on single core machine?
是的。 volatile 会导致读取和/或写入内存屏障,并在另一个线程访问相同的 volatile 字段时确保“发生之前”关系。请参阅this tutorial 。它确保对本地 CPU 缓存的更改写入主内存,并且对主内存的更改使任何 CPU 缓存页面无效。
这对于单处理器机器来说不太重要,因为只需要担心一个 CPU 缓存。然而,重要的是要认识到 volatile
的“happens-before”保证仍然很重要。即使只有一个 CPU,由于多线程的时间切片,它们也可以防止出现竞争情况。
关于java - Java中的关键字Volatile在单核机器上强制内存同步吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19099191/