什么是“同步障碍”?

Jov*_*voH 5 java jvm synchronized java-memory-model memory-barriers

最近我正在阅读Doug Lea 关于 JSR 133: JavaTM Memory Model and Thread Specification Revision的页面The JSR-133 Cookbook for Compiler Writers

我在那里读到这一行:

内存屏障本身并不是“同步屏障”

我搜索了一些关于内存屏障同步屏障之间差异的资源,但找不到任何好的东西。我也无法判断同步障碍与 Java 与其他语言相比是否有任何不同。

Ste*_*n C 6

首先,正如@markspace 指出的那样,您正在查看的文档并不打算作为 Java 程序员尝试了解如何正确编写线程代码的文档。

“这是实现新 Java 内存模型 (JMM)的非官方指南”

因此,如果您为此目的阅读它,您可能会不必要地混淆自己。相反,您应该使用 Java 的更高级别的并发机制(最好!),或者阅读和理解 JMM 规范。


同步屏障(不是“同步屏障”)(我相信)是指 Java 内存模型的术语。

JLS 17.4.4定义了各种操作之间的同步关系。这种关系意味着两个线程之间的同步:

同步边的源称为发布,目标称为获取

我不确定这一点(因为 Cookbook 文档没有详细说明),但我认为Cookbook 中的“同步障碍”是指同步边缘的物理实现......无论是什么。

所以文档在这里说的是它所指的内存屏障与实现锁等的机制不是一回事。这真的很明显。

  • 我不明白官方与非官方与我所说的有什么关系。我们提出的观点与文档的“目的”有关,而不是其状态。请注意我在答案中突出显示的词。另外,我从未说过道格·李所说的任何话都是错误的。如果您认为我暗示了这一点,那么您就误解了我写的内容。 (2认同)