首页 > 解决方案 > 线性化和静态一致性有什么区别?

问题描述

我正在阅读 Maruice Herilihy 和 Nir ​​Shavit 所著的《多处理器编程的艺术》一书,并试图理解关于并发对象的第 3 章

线性化: “线性化背后的基本思想是,在以下意义上,每个并发历史都等同于一些顺序历史。基本规则是,如果一个方法调用先于另一个方法调用,则较早的调用必须在稍后调用。相比之下,如果两个方法调用重叠,那么它们的顺序是不明确的,我们可以自由地以任何方便的方式对它们进行排序。

现在,我正在阅读关于静态一致性的文章,

方法调用应该以一次一个的顺序发生。

由一段静止时间分隔的方法调用应该会按照它们的实时顺序生效。

我感觉两者都一样。我读了这个顺序一致性和静态一致性有什么区别?.

从上面的链接

静态一致性: “要求非重叠操作以实时顺序生效,但重叠操作可能会重新排序”

谁能解释两者有何不同?

谢谢。

标签: concurrencyconsistency

解决方案


静态一致性是比线性化更弱的约束。例如,有 3 个并发方法调用。

<---A---> <---B--->
  <------C------>

对于线性化,您可以将并发执行映射到顺序执行,例如 ABC、ACB、CAB 等。但是您不能将 B 放在 A 之前,因为必须保留优先顺序。

这不是静止一致性的情况,您可以重新排序 A 和 B,因为 A 和 B 之间没有静止点(因为 C 处于未决状态)。换句话说,只要没有将它们分开的静止点,您就可以以任何您喜欢的方式对方法调用进行重新排序。


推荐阅读