Skip to content

定义Definition

顺序一致性

Sequential consistency

并发对象操作可重排为保持各线程观察的合法顺序历史;寄存器情形要求每次读取得相应最近写值。

形式陈述 ​

顺序一致性可以在一般对象历史上定义,读写内存是其中一个重要实例。固定每个对象的顺序抽象数据类型规格,先取有限、良构的并发对象历史 H。若存在合法顺序历史 S,使每个进程的调用、返回与结果都保持不变,即

∀p,S|p=H|p,

则完整历史 H 是顺序一致的。含 pending 调用时,本条与线性一致性使用同一 completion 约定:可补全部分 pending 的响应并删除其余调用,得到 H′,再要求 S|p=H′|p。这里只要求每个进程看到相同的操作序列,不要求跨进程的实时先后也保留。

把对象限定为读写寄存器,就得到共享内存的 SC 内存模型。设操作集合为 E,每个线程给出程序顺序 <po;合法顺序历史等价于存在 E 上的全序 <S,满足:

<po ⊆ <S,

并且每次读 r=R(x)⇒v 返回 <S 中位于 r 之前、对位置 x 的最后一次写所写的值;若没有这样的写,则返回 x 的初值。全序 <S 是一次执行的见证,不要求实现真的由单一中央调度器逐步运行。

定义只保留每线程程序顺序。若一个线程的操作已经响应、另一线程之后才发起操作,跨线程的这段实时先后仍不必进入 <S;这正是它与线性一致性的量词差异。

直觉

SC 允许把并发执行解释成某一种合法交错。每个线程都看见自己的指令按程序次序发生,所有线程还必须共享同一解释;自由度只在不同线程操作如何穿插。它比“各地址各有一个写序”更强,因为跨地址读值也必须同时嵌入同一个全序。

这个心智模型不携带墙上时钟。不同线程的两个非重叠操作仍可在见证全序中反向排列,只要各自线程内没有约束被破坏。

例子与边界

初值 x=y=0,线程 P 执行 W(x,1);R(y)⇒0,线程 Q 执行 W(y,1);R(x)⇒0。若存在 SC 见证,则程序顺序与读初值依次给出

W(x,1)<SR(y)<SW(y,1)<SR(x)<SW(x,1),

形成严格全序中的环,故该结果不可能是 SC。内存一致性模型页给出 2010 x86-TSO 下缓冲两次写、再读两个初值的完整执行,并证明在两个线程的写与读之间分别加入 MFENCE 后如何排除它。允许性需要一条模型内执行,禁止性则需要对所有候选次序的约束论证。

这个例子还展示 SC 不具对象局部可组合性。单看寄存器 x,可把 R(x) 排在 W(x,1) 前;单看 y 也可作同样排列,所以两个对象投影分别满足 SC。合并后却出现上述环。线性一致性具有局部性:逐对象证明可组合成全局证明,这是两种条件在模块化上的另一处差异。

一般对象的区别也可以直接看到。初始空队列中,A 的 enqueue(a) 已返回,B 才执行并完成 enqueue(b),随后 B 的 dequeue() 返回 b。按 B 入队、B 出队、A 入队排列,是保持各进程投影的合法 FIFO 顺序,所以这个历史满足 SC;线性一致性却必须保留 A 先完成的实时顺序,因此应先弹出 a。

另一方面,若客户端 A 的 write(1) 已经返回,客户端 B 之后才调用 read() 却读到旧值 0,只要两个客户端各自没有别的顺序约束,仍可在 <S 中把读排到写前,因此可能满足 SC;它违反线性一致性的实时顺序。

“所有处理器最终看到相同值”只是收敛性,不等同于存在统一操作序。SC 也只是一项安全约束,不承诺某次读写最终执行、锁不会饥饿或副本在故障后仍可用。

推论与应用

SC 是弱内存研究的基准,却不是现代语言与硬件的默认行为。特定语言的 SC-for-DRF 保证只在程序消除模型所定义的数据竞争,并正确使用同步与原子内存序时,才把相应观察映射回某类 SC 交错。

对同一个顺序对象规格,任何线性一致历史都能提供一个保程序顺序的 SC 见证,反向不成立。这个子类关系不抹平抽象层:SC 常约束内存操作集合,线性一致性常约束调用—响应区间。应用结论前仍要确认两者排列的是同一批操作。

验证工具可从程序的执行轨迹提取内存事件,再由模型检查寻找无法嵌入任何保程序序全序的反例。工具探索哪些 interleaving 取决于语言和硬件模型;SC 的定义本身并不保证实现允许所有交错,也不保证只允许 SC 交错。

参考资料
  • Leslie Lamport, “How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs,” IEEE Transactions on Computers C-28(9), 1979, pp. 690–691,读写内存的原始 SC 定义。
  • Maurice P. Herlihy and Jeannette M. Wing, “Linearizability: A Correctness Condition for Concurrent Objects”, ACM TOPLAS 12(3), 1990, pp. 463–492,§§2.1–2.2 的有限历史与完成约定、§3.3(p. 472)的一般对象 SC 定义及队列反例。
  • Maurice Herlihy and Nir Shavit, The Art of Multiprocessor Programming, rev. 1st ed., Morgan Kaufmann, 2012,Ch. 3。
关系图谱10 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

暂未标注直接上位概念。

下位 / 直接特例