形式陈述
历史
与 对每个进程的投影等价; - 若操作
的响应在 中先于 的调用,则 在 中先于 。
等价地,每个已完成操作可被视为在其调用与响应之间某个瞬间原子发生;该点称线性化点,但证明不一定要预先给出固定代码位置。
直觉
线性一致性把重叠操作自由排序,却绝不颠倒现实中已经完全结束后才开始的操作。使用者可把并发对象当作符合顺序规范的原子对象来推理。
例子与边界
若一次 write(1) 已返回,之后才调用 read(),线性一致寄存器不能让该读返回旧值。若读与写时间上重叠,则二者任一顺序都可能合法。线性化点可以依赖未来执行,甚至在帮助机制中由另一线程完成,不能机械等同于某一条本线程指令。
推论与应用
线性一致性是局部的:每个对象历史都线性一致时,组合历史也线性一致。它还保持实时顺序,因此通常适合模块化对象规范;但它是安全性质,不保证任何操作最终返回。
参考资料
- Maurice P. Herlihy and Jeannette M. Wing, “Linearizability: A Correctness Condition for Concurrent Objects,” ACM TOPLAS 12(3), 1990,Full paper, §§2–3。
- Hagit Attiya and Jennifer Welch, Distributed Computing: Fundamentals, Simulations, and Advanced Topics, 2nd ed., Wiley, 2004,Ch. 3。