gpt4 book ai didi

Java 相当于 Thread.MemoryBarrier

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:16 26 4
gpt4 key购买 nike

在 Java 中,我如何显式触发一个完整的内存栅栏/屏障,等于调用

System.Threading.Thread.MemoryBarrier();

在 C# 中?

我知道,自从 Java 5 读取和写入 volatile 变量以来,一直在导致完全内存栅栏,但也许有一种(有效的)方法没有 volatile

最佳答案

MemoryBarrier() 相比,Java 的 happens-before 是一个更强大的工具,在维护线程安全的同时为积极优化留出了更多余地。

如您所料,一个更锋利的工具也需要更加小心才能正确使用,这就是如何描述 volatile 变量访问的语义。您必须在写入站点上写入一个 volatile 变量,并在每个读取站点上从相同的 volatile 中读取。言外之意,您可以拥有任意数量的独立的本地化“内存屏障”,每个屏障对应一个 volatile 变量,并且每个屏障仅保护可从该变量到达的状态。

完整的习语通常被称为“安全发布”(虽然这是一个更通用的术语)并且意味着填充一个将在线程之间共享的不可变对象(immutable对象)图,然后将对它的引用写入 volatile 变量。

关于Java 相当于 Thread.MemoryBarrier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25553233/

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