如果我理解正确,易失性会导致内存屏障使本地内存与主内存同步。这在多核机器上非常有用。
当多线程应用程序在单核机器上运行时,这种内存同步会发生吗?
如果我理解正确,易失性会导致内存屏障使本地内存与主内存同步。这在多核机器上非常有用。
当多线程应用程序在单核机器上运行时,这种内存同步会发生吗?
当多线程应用程序在单核机器上运行时,这种内存同步会发生吗?
是的。 volatile
当另一个线程访问同一volatile
字段时,会导致读取和/或写入内存屏障并确保“发生在之前”的关系。请参阅本教程。它确保对本地 CPU 缓存的更改写入主内存,并且对主内存的更改使任何 CPU 缓存页面无效。
这在单处理器机器上不太重要,因为只有一个 CPU 缓存需要担心。但是,重要的是要意识到“发生在之前”的保证volatile
仍然很重要。即使只有一个 CPU,它们也可以防止由于多个线程的时间切片而可能发生的竞争条件。
当多线程应用程序在单核机器上运行时,这种内存同步会发生吗?
是的。