concurrency - 线性化和静态一致性有什么区别?
问题描述
我正在阅读 Maruice Herilihy 和 Nir Shavit 所著的《多处理器编程的艺术》一书,并试图理解关于并发对象的第 3 章
线性化: “线性化背后的基本思想是,在以下意义上,每个并发历史都等同于一些顺序历史。基本规则是,如果一个方法调用先于另一个方法调用,则较早的调用必须在稍后调用。相比之下,如果两个方法调用重叠,那么它们的顺序是不明确的,我们可以自由地以任何方便的方式对它们进行排序。
现在,我正在阅读关于静态一致性的文章,
方法调用应该以一次一个的顺序发生。
由一段静止时间分隔的方法调用应该会按照它们的实时顺序生效。
我感觉两者都一样。我读了这个顺序一致性和静态一致性有什么区别?.
从上面的链接
静态一致性: “要求非重叠操作以实时顺序生效,但重叠操作可能会重新排序”
谁能解释两者有何不同?
谢谢。
解决方案
静态一致性是比线性化更弱的约束。例如,有 3 个并发方法调用。
<---A---> <---B--->
<------C------>
对于线性化,您可以将并发执行映射到顺序执行,例如 ABC、ACB、CAB 等。但是您不能将 B 放在 A 之前,因为必须保留优先顺序。
这不是静止一致性的情况,您可以重新排序 A 和 B,因为 A 和 B 之间没有静止点(因为 C 处于未决状态)。换句话说,只要没有将它们分开的静止点,您就可以以任何您喜欢的方式对方法调用进行重新排序。
推荐阅读
- android - @Bindable 不在 BR 类中生成字段
- grafana - 是否有任何选项可以通过 grafana 中的 api 调用加载图表?
- xslt - 具有不同属性的 xml dtd 或 xml 模式链接元素
- r - 如何删除不重复的数据?
- node.js - Squalise:TypeError:没有'new'(打字稿)就不能调用类构造函数模态
- javascript - 获取对象内对象数组的长度
- python - 如何从我制作的要存储在主程序中的全局变量中的函数中获取字符串?
- javascript - 如何在 Opencart 3.0 中按 sku 或按型号将产品添加到购物车
- python - 从系统某处调用脚本时如何导入配置文件?
- javascript - 将状态作为道具传递给 react-native-tab-view 的问题?