jag*_*gan 5 java memory concurrency multithreading
我正在尝试理解 JMM 的因果关系要求。JMM的这一部分描述了它 https://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.4.8
E在因果关系定义中意味着什么?这是否意味着我们试图证明的执行是合理的,或者是证明从 Ci 到 Ci+1 的提交合理的执行?
另外,在因果关系定义的 9 个规则中,用于将 A 的动作添加到从 Ci-1 到 Ci 或从 Ci 到 Ci+1 的承诺动作集中。
E在因果关系定义中意味着什么?这是否意味着我们试图证明的执行是合理的,还是证明从 Ci 到 Ci+1 的提交是合理的执行?
乙是您试图确定因果有效性的执行。
E i是格式良好的执行,通过它您可以处理因果关系,而无需引入总时间顺序的概念。
另外,在因果关系定义的 9 个规则中,用于将 A 的动作添加到从 Ci-1 到 Ci 或从 Ci 到 Ci+1 的承诺动作集中。
我不确定我是否理解你的问题。我尝试回答可能会涉及到您不感兴趣的内容的重复,但请耐心等待。
如果执行的所有操作都可以根据第 17.4.8 节中的规则提交,则根据 Java 内存模型的因果关系要求,执行是有效的。
本节中的规则通过建立规则集来定义可以提交的内容,该规则集用于从空的已提交操作集构建到最终的所有执行操作集。这是通过离散数量的步骤完成的,并且每个步骤中提交的操作以及它们在不同执行中与上一步中提交的操作的关系都有一致性规则和不变量(上面的E与E i )。
至于根据定义根据最后一条规则(第 17.4.8 节中的第九个编号项目符号)提交操作,每个集合C i都是C i+1的真子集,因此不会提交从C i到C i+1的操作,但是从A到C i。
我发现以下两个链接是消除 JMM 中因果关系迷雾的最佳资源:
PS对于那些不了解规范这部分内容的人,第 17.4.8 节的要点是弥合先发生一致执行和SC DRF(顺序一致、无数据竞争)执行之间的差距。这两者之间的区别是所谓的凭空值,神秘的第 17.4.8 节不允许这种值,如果不加以控制,推理起来可能会非常糟糕。