Concurrency 顺序一致但非静态一致的执行示例

Concurrency 顺序一致但非静态一致的执行示例,concurrency,consistency,Concurrency,Consistency,根据Maurice Herlihy和Nir Shavit的《多处理机编程艺术》(第3章),在并发程序正确性的背景下,顺序一致性比静态一致性更为重要 作者在3.4.1中还提到,有顺序一致的执行,但不是静态一致的。我不明白怎么做。是否有人可以提供一个指示灯或示例执行?请考虑将元素排队和退队到哪个位置 关于并发,我读到(第20页): 顺序一致性中允许的场景示例 静态一致性模型中的模型和不允许,如中所示 图2.1。两个进程共享一个并发队列数据结构。这个 第一个进程是队列x。在一些不重叠的后续间隔, 第二

根据Maurice Herlihy和Nir Shavit的《多处理机编程艺术》(第3章),在并发程序正确性的背景下,顺序一致性比静态一致性更为重要 作者在3.4.1中还提到,有顺序一致的执行,但不是静态一致的。我不明白怎么做。是否有人可以提供一个指示灯或示例执行?

请考虑将元素排队和退队到哪个位置

关于并发,我读到(第20页):

顺序一致性中允许的场景示例 静态一致性模型中的模型和不允许,如中所示 图2.1。两个进程共享一个并发队列数据结构。这个 第一个进程是队列x。在一些不重叠的后续间隔, 第二个过程是让y排队。最后,第二个进程执行 退出队列并接收y。此示例顺序一致,但不一致 假设排队之间的时间 操作超出了静止时间间隔

图2.1:

T1:  --- enq(x) ---------------------------
T2:  ------------- enq(y) ---- deq():y ----
顺序一致性允许此历史记录,可以是 静态一致性允许或禁止,并且 线性一致性


如果假设在两个队列之间,队列是静态的,那么T2应该看到T1的变化,而出列应该返回x。如果假设两个队列之间没有静态间隔,则可以根据需要对两个队列重新排序,并且deq():y是一致的。

以下执行是否可以作为“静态一致但不顺序一致”的示例?(x)图1:--Q(x)图1:--Q(x)图1:--2008 2008年7月(x)图1:--2008 2008 2008 2008 2008年:2008年(U)U卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢布(UUU卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU。然而,如果我们方便地将静态间隔取为|,那么我们可以对T1的两个enq()进行重新排序,它将是静态一致的@ewernli,你认为这个解释有意义吗?我想是的,基于我对静止一致性的理解。但这对我来说也是一种新的一致性形式,我昨天就知道了:)@ewernli是这被认为是顺序一致性的原因,enq(y)deq():y enq(x)是一个可能的顺序执行序列?也就是说,它在程序顺序中仍然有效。@william-顺序一致性只是要求在执行过程中,每个线程发出的操作必须按程序顺序进行-它们的交错不受控制。因此,您提供的示例确实是一个有效的顺序一致执行。@ewernli-感谢您发布Spiegel论文中的示例(也感谢他!)。我不得不回到我的赫利希和沙维特的书,重新阅读静态一致性。关键在于,每个静止期都会将之前发生的操作与之后发生的操作进行排序。