java – 因果关系示例执行
该链接提供了允许合法执行的示例.请参阅第26页第4.8.1
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.79.629&rep=rep1&type=pdf节.
这个例子是 Initially,x = y = 0 Thread 1 Thread 2 r1 = x; r2 = y; y = 1; x = r2; r1 == r2 == 1 is a legal behavior 从纸上,
我们不能提交r2 = y,其中y的值是1,因为y的读取将根据规则6返回0.但是根据E3中下一个提交周期中的文章,r2 = y可以看到值y = 1在Thread1中提交. 解决方法
最重要的是要注意的是规则7允许在Ci中执行的读取在Ei中看到的不同写入比在E中看到的那样.但是,薛定谔的读取必须尽早解决.规则5确保这样的读取必须在Ei 1中看到与E中相同的写入.
因此,如果您希望读取看到赛车写入,则不能在提交这两者的同一执行中进行.您需要等待下一次执行,并且您需要确保赛车写入不会违反发生 – 在排序之前(在我们的示例中,主要是在y = 0和r2 = y的排序之前发生). 所以你在C2中提交读取r2 = y,在E2中它只看到写入y = 0,因为写入发生在它之前,但在E3中,r2 = y可以看到它无法建立的赛车写入 – 之前. 附:这篇推理在论文中解释为读r1 = x以下几句:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |