静态一致但顺序不一致的程序顺序示例?

example of a program order which is quiescently consistent but sequentially inconsistent?

作者在 Maurice Herlihy 和 Nir ​​Shavit 的《多处理器编程艺术》一书(第 3 章)中提到,顺序一致性和静态一致性是不相关的,并且有程序顺序的例子,它们是一个而不是另一个。有没有静态一致但顺序不一致的程序顺序的例子?

我也在看这本书,我会尝试解释一下我对这个问题的理解。我的脑子里还没有完整的画面,所以我有可能弄错了:)

不管怎样,看看书上的图3.8吧。该示例表明组合不是顺序一致的。如果你理解这个例子,你就会有一个顺序不一致的执行。

这个例子不是静态一致的。让我们试着改变它,让它保持静态一致,但仍然顺序不一致。我们需要做的就是将线程B的方法调用延长到与线程A的调用重叠。例如线程B中的q.enq(y)应该与p.enq(x)q.enq(x)重叠,[=线程 B 中的 13=] 应与 q.enq(x) 重叠,线程 B 中的 p.deq(y)q.deq(x) 应与 p.deq(y) 重叠。

现在,同样的论点是有效的:这个系统不是顺序一致的。然而,该系统是静态一致的,因为一切都重叠,因此对事件的顺序没有限制。

所以我们找到了一个静态一致但不顺序的执行。