- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
现在我们有了
Load A
StoreStore
Store B
是否有可能实际执行顺序如下
StoreStore
Store B
Load A
如果可能,如何解释似乎违反Java volatile 发生前保证
的情况。
据我所知, volatile 语义是使用以下JMM内存屏障添加策略实现的
insert a StoreStore before volatile variable write operation
insert a StoreLoad after volatile variable write operation
insert a LoadLoad after volatile variable read operation
insert a LoadStore after volatile variable read operation
现在,如果我们有两个 java 线程,如下所示
线程 1
Load A
StoreStore
Store volatile B
线程 2
Load volatile B
Load C
根据《Java volatile 发生前保证》,当加载 volatile B
之后时,加载 A
应该发生在 加载 C
之前存储 volatile B
,但是如果加载A
可以重新排序到“存储 volatile B之后”,如何保证加载A在加载C之前
?
最佳答案
从技术上讲,Java 语言不存在内存障碍。相反,Java 内存模型是根据发生在关系来指定的;有关详细信息,请参阅以下内容:
您所讨论的术语来自The JSR-133 Cookbook for Compiler Writers 。正如该文档所说,它是为编写实现 Java 内存模型的编译器的人们提供的指南。它正在解释 JMM 的含义,显然无意成为官方规范。 JLS 是规范。
JSR-133 Cookbook 中有关内存屏障的部分根据它们限制特定加载和存储序列的方式对它们进行分类。对于 StoreStore
障碍,它说:
The sequence:
Store1; StoreStore; Store2
ensures that Store1's data are visible to other processors (i.e., flushed to memory) before the data associated with Store2 and all subsequent store instructions. In general,StoreStore
barriers are needed on processors that do not otherwise guarantee strict ordering of flushes from write buffers and/or caches to other processors or main memory.
如您所见,StoreStore
屏障仅约束store
操作的行为。
在您的示例中,您有一个加载
,后跟一个存储
。 StoreStore
屏障的语义没有提及 load
操作。因此,您建议的重新排序是允许的。
关于java - Java中的StoreStore内存屏障是否禁止读写重新排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58185339/
是否应该将 store-store-barriers 放入构造函数中? 这是一个例子。最初假设 global_f = f = r = 0。一个线程A创建一个对象,赋值给一个字段,赋值给一个全局变量:
JSR133 cookbook说: StoreStore Barriers The sequence: Store1; StoreStore; Store2 ensures that Store1's
我想在原子和非原子操作之间使用独立内存屏障(我认为无论如何这根本不重要)。我想我理解存储屏障和加载屏障的含义以及 4 种可能的内存重新排序; LoadLoad , StoreStore , LoadS
我正在阅读 Hans 的一篇文章,他认为在 lazySet 或最终变量写入之前也需要 LoadStore。 他展示了一种我无法理解的特殊竞争条件。 http://www.hboehm.info/c++
我是一名优秀的程序员,十分优秀!