静态一致但顺序不一致的程序顺序示例?
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)
重叠。
现在,同样的论点是有效的:这个系统不是顺序一致的。然而,该系统是静态一致的,因为一切都重叠,因此对事件的顺序没有限制。
所以我们找到了一个静态一致但不顺序的执行。
作者在 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)
重叠。
现在,同样的论点是有效的:这个系统不是顺序一致的。然而,该系统是静态一致的,因为一切都重叠,因此对事件的顺序没有限制。
所以我们找到了一个静态一致但不顺序的执行。