我正在研究Java语言规范17.4中的Java内存模型,我想通过测试因果关系来理解java内存模型。我在JMM causality test case.I实现测试用例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来测试这个case.r1 == r2 == 1是不可能的,但没有发生。我认为我的实现没有被更正,但我不知道如何测试。
发布于 2021-11-22 19:23:24
您可能正在运行英特尔架构,在该架构中不会发生这种竞争情况。VM可以实现比Java内存模型所要求的更严格的模型,但它们不需要这样做。如果您使用SPARC或ARM,您可能会发现不同的结果。JMM试图将所有这些架构包含在一个模型中。
https://stackoverflow.com/questions/40663062
复制相似问题