“内存一致性模型是共享内存系统对程序、编译器与硬件之间可观察行为的规格。给定一次共享内存执行中的读、写、原子操作、线程内程序顺序与 reads from 候选关系,模型约束哪些重排可见、每次读…”
形式陈述 ​
并发对象历史
调用与返回都出现时构成完整操作,只有调用而没有返回时称为 pending。若操作
区间重叠的操作在此关系下不可比。历史的 completion 可为部分 pending 调用补上匹配返回,再删除仍未完成的调用;采用哪种 completion 由具体正确性条件规定。
直觉 ​
对象历史刻意只保留客户端可见接口,把锁、CAS 重试和缓存操作隐藏起来。两个实现内部走过完全不同的路径,只要产生同一调用—返回历史,对顺序规格而言便不可区分。操作区间重叠留下的“尚无实时先后”正是并发模型允许选择线性化顺序的空间。
最终对象状态不足以代替历史:相同终态可能伴随不同返回值或违反实时顺序。正确性因此是历史集合上的条件,而不只是终态不变量。
例子与边界 ​
线程
若 “write(1)” 已返回,另一线程才调用 “read()”,便有
推论与应用 ​
线性一致性在合法顺序历史之外还保持
参考资料
- Maurice P. Herlihy and Jeannette M. Wing, “Linearizability: A Correctness Condition for Concurrent Objects,” ACM TOPLAS 12(3), 1990.
- Maurice Herlihy and Nir Shavit, The Art of Multiprocessor Programming, rev. 1st ed., Morgan Kaufmann, 2012, Chapter 3.