我正在研究 Java 语言规范 17.4 中的 Java 内存模型。我想测试理解 java 内存模型的因果关系。我在 JMM causality test case 中找到了一组因果关系。 .我实现测试用例 1,它如下:
@JCStressTest
@State
public class CausalityTestCase1 {
int x = 0;
int y = 0;
@Actor
public void actor1(IntResult2 r) {
r.r1 = x;
if (r.r1 >= 0) {
y = 1;
}
}
@Actor
public void actor2(IntResult2 r) {
r.r2 = y;
x = r.r2;
}
}
我使用jcstress lib来测试这个案例。r1 == r2 == 1是不可能的,但没有发生。我认为我的实现没有得到纠正,但我不知道如何测试。
最佳答案
您可能正在运行 Intel 架构,而这种竞争条件不会发生。 VM 可以实现比 Java 内存模型要求的模型更严格的模型,但它们不是必须这样做。如果您使用 SPARC 或 ARM,您可能会发现不同的结果。 JMM 试图将所有这些架构包含在一个模型中。
关于java - 如何实现Java内存模型因果关系测试用例1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40663062/