该链接提供了允许合法执行的示例。请参阅第26页第4.8.1节http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.79.629&rep=rep1&type=pdf。
示例是
devServer: {
historyApiFallback: true
}
来自论文,
我们希望采取行动 r2 = y 看到值1。 C 1 不能包含此操作 看到这个值:既没有写信给 ÿ 已经承诺了。 C 2 可能包含这个 行动;然而,阅读 ÿ 必须返回0 in Ë 2 ,因为规则6.执行 Ë 2 因此与...相同 Ë 1
在 Ë 3 ,根据第7条, r2 = y 可以看到发生的任何冲突写入 C 2 (只要 因为写入是在一致之前发生的。此操作现在可以看到1的写入 至 ÿ 在线程1中,已提交 C 1 。我们承诺一个额外的行动 C 3 :写1到 X 通过 x = r2
我们不能提交r2 = y,其中y的值为1,因为y的读取将根据规则6返回0.但是根据E3中下一个提交周期中的文章,r2 = y可以看到y的值= 1,在Thread1中提交。 我怀疑是执行E3提交r2 = y还应该满足规则6并且应该只看到它之前发生的值,即x = 0。为什么在E2中由于规则6而提交r2 = y,y只能将y值读为0但在E3中提交r2 = y时,y可以读取在Thread1中写入的y = 1?
答案 0 :(得分:0)
最值得注意的是规则7允许在 C i 中提交的读取看到 E i 而不是 E 中看到的那个。然而,这个薛定谔的阅读必须尽快解决。规则5确保此类读取必须在 E i + 1 中看到与 E 中相同的写入。
因此,如果您希望读取看到赛车写入,则不能在提交这两者的同一执行中具有该值。您需要等待下一次执行,并且您需要确保赛车写入不会违反发生 - 在排序之前(在我们的示例中,主要是在y = 0
和r2 = y
之前发生的事件)
所以你在 C 2 和 E 2 中提交阅读r2 = y
只有写y = 0
因为写入发生在它之前,但是在 E 3 中,r2 = y
可以看到它所用的赛车写入'建立之前发生的事情。
P.S。这篇推理在下面的几个句子的阅读r1 = x
的论文中得到了解释:
C 4 ,作为 E 4 的一部分,包含读取
r1 = x
;由于规则6,它仍然看到0 我们的最终执行 E = E 5 ,但是,规则7允许r1 = x
看到写入1 {{1}在 C 3 中提交的内容。