gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:31:34 25 4
gpt4 key购买 nike

以下问题:

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 memoryBarrier
After some write of A-C: write memoryBarrier=true;

Thread2:
the same as Thread1:
Before read of A-C: read memoryBarrier
After some write of A-C: write memoryBarrier=true;

只有一个 volatile 变量更好,还是应该让每个变量都可以在 valatile 上写入/读取?

如果我在第二个解决方案中每次都写入内存屏障,可以触发写-读发生在java中的关系语义之前吗?我猜它没有优化?

总结一下:我的解决方案 1 和 2 在语义上相等吗?解决方案2更好吗?我是否可以始终将相同的值写入 volatile 变量以获得读/写 volatile 发生在关系之前?

最佳答案

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

我的直觉告诉我,有 3 个非 volatile 内存访问,然后是一个 volatile访问可能比发出 3 volatile 更好连续访问。

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

关于java:在一个变量上使用 volatile VS 每个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57420559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com