HPC*_*PCS 7 java multithreading locking
我知道基于这个链接http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html,没有volatile变量的双重检查锁定是不安全的
class Foo {
private Helper helper = null;
public Helper getHelper() {
if (helper == null) {
synchronized(this) {
if (helper == null) {
helper = new Helper();
}
}
}
return helper;
}
}
Run Code Online (Sandbox Code Playgroud)
我想在家用电脑上模拟这种情况.我有标准的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