gpt4 book ai didi

java - 如何在没有 volatile 的情况下打破双重检查锁定

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:01 25 4
gpt4 key购买 nike

我知道double check locking without volatile variable is not safe基于此链接 http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

class Foo { 
private Helper helper = null;
public Helper getHelper() {
if (helper == null) {
synchronized(this) {
if (helper == null) {
helper = new Helper();
}
}
}
return helper;
}
}

我想在家里的电脑上模拟这种情况。我有标准的 jdk1.7 和多核处理器。但我无法模拟损坏的行为。我正在使用这个测试 http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckTest.java那应该模拟这个。我也创建了一些我的测试,但没有成功。你知道如何模拟这个没有 volatile 的双重检查习惯用法被破坏时的情况吗?因此它返回部分创建的 Helper 类。

最佳答案

在 x86 上,它需要一个具有大量字段的类,以便初始化存储溢出发布,如下所示: http://cs.oswego.edu/pipermail/concurrency-interest/2015-January/013861.html

或者,您必须修改编译器以随机化指令调度程序。在像 ARM 这样的非 TSO 架构上,这可以在没有任何技巧的情况下进行演示,请参阅: http://shipilev.net/blog/2014/safe-public-construction/#_correctness

关于java - 如何在没有 volatile 的情况下打破双重检查锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27905737/

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