为了账号安全,请及时绑定邮箱和手机立即绑定

java:在一个变量上使用 volatile VS 每个变量

java:在一个变量上使用 volatile VS 每个变量

拉丁的传说 2023-05-24 14:50:55
以下问题:volatile Object A;volatile Object B;volatile Object C;Thread1:reads and writes to A-C Thread2:the same as Thread1所以我的问题是:如果我这样做会更好吗:Object A;Object B;Object C;volatile boolean memoryBarrier=true;Thread1:Before read of A-C: read memoryBarrierAfter some write of A-C: write memoryBarrier=true;Thread2:the same as Thread1:Before read of A-C: read memoryBarrierAfter some write of A-C: write memoryBarrier=true;只有一个 volatile 变量更好,还是我应该让我可以在 valatile 上写/读的每个变量?这样可以吗,如果我每次都在我的第二个解决方案中写入我的 memoryBarrier?,以触发写入 - 读取 - 在 java 中的关系语义之前发生?我猜它没有被优化掉?所以总结:我的解决方案 1 和 2 在语义上是否相等?解决方案2更好吗?我是否可以始终将相同的值写入 volatile 变量以获得读/写 volatile happensbefore-relationship?
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

该示例非常简单,因此您可能看不到性能方面的太大差异。

我的直觉告诉我,在进行 3 次非易失性内存访问后进行一次volatile访问可能比volatile连续发出 3 次访问要好。

这三个volatile内存访问是完全有序的(A happens-before B happens-before C)并限制编译器和处理器执行某些优化。非易失性版本在 A、B 和 C 之间建立无先行关系,因此为编译器和处理器提供更多自由来利用内存级并行/指令级并行。


查看完整回答
反对 回复 2023-05-24
  • 1 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信