java - Java中的关键字Volatile在单核机器上强制内存同步吗?

标签 java concurrency volatile memory-barriers

如果我理解正确的话, 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/

相关文章:

java - Google BigQuery 的 JDBC 驱动程序?

java - 在java中,通过函数调用将运行时异常用作 super "break"是不好的做法吗?

java - 在“我的个人资料”页面中添加一处特性 - Alfresco Share

.net - 并发垃圾回收如何与并行计算一起工作?

java - 这个java程序中存在多线程冲突。怎么解释呢?

java - 读取以 xx.5 结尾的整数和小数的正则表达式

java - 在java中同时访问 volatile 变量

关于在 OS 中运行的程序的并发问题

c++ - 编译器是否假定私有(private) const 成员*从不*改变?

c++ - 如何使用 memset 将 volatile 数组设置为零?