“随机共识的完整固定调度器案例把概率终止的量词、两阶段阈值、同轮证据和几何尾界逐项展开;读写共识数下界则在共享内存中用临界配置、交换和覆盖证明二进程不可能性。模型及终止条件不同,应分别核对。”
形式陈述
固定异步共享内存模型:进程可能崩溃停止,正确进程持续取得步骤;实现可使用任意多个原子读写寄存器和某种线性一致的对象类型
这里分类的是对象类型及其完整顺序规格,不是某一个容量有限、随后耗尽的实例。算法可以创建任意多个
Herlihy 层级的经典分类包括:原子读写寄存器的共识数为
通用构造的核心是把并发操作转化为一串待决定的状态机步骤。各进程提出下一项操作,利用第
直觉
共识要求多个进程从不同提议中不可撤销地选出同一个值,因此能测量原语“打破对称”的能力。普通读写让每个进程留下信息,却没有一个原子时刻能让竞争者共同认定谁先;CAS 则把“若仍无人决定,就由我写入”压成一次不可分割的条件更新,首个成功者自然成为共同选择。
层级的价值在于把无数实现问题缩成一次比较。若目标类型能解决三进程共识,而手头原语最多只能解决两进程共识,就无需继续寻找 wait-free 实现;不可能性已经来自组合论证。这个结论并不禁止锁实现或较弱进展实现,只精确排除指定模型中的 wait-free 路线。
例子与边界
用 CAS 为任意有限数量进程解决一次共识:共享原子槽 decision 初值为 CAS(decision, ⊥, v_i),随后读取并决定槽中的值。只有一个 CAS 能把
固定二进程模型与价态
下面完整证明读写寄存器的二进程下界。[1, §3.1] 进程
本地步骤包括决定事件。等待也必须表示为可继续取步的本地动作,不能把阻塞后无动作当作完成。我们采用的wait-free条件包含:任意尚未决定的进程,从任意可达配置独自运行都能有限决定;在任意无限执行中,取得无穷多自身步骤的进程必已在有限前缀决定。无需假设两个进程都公平地继续运行。[1, §2.3]
配置
允许空延伸,因此已经作出的决定也算在内。wait-free保证
所以单价只能保持,不能翻转。记
从输入链找到初始双价
设
若三个配置全单价,就有相邻两个价态不同。第一对仅
为什么一定有临界配置
从初始双价配置出发,假如每个可达双价配置至少有一个立即后继仍双价,就始终选择这样的下一步,得到一条无限双价执行。只有两个进程,至少一个取得无穷多步;双价意味着始终没有人决定,违反wait-free。
所以存在可达双价配置
两边不能是同一个单值集合。交换
情形一:步骤可交换
若某一步纯本地,或两步访问不同寄存器,或两步都读同一个寄存器,两种次序产生完全相同的配置:
原因是两步的读返回值、写入内容及两个本地后继都相同。一个配置却被要求同时0-单价和1-单价,矛盾。本地决定也在此情形:若执行它已造成两个不同决定,则更直接违反一致性。
情形二:同一个寄存器,一读一写
设
对称地,若
情形三:同一个寄存器,两次普通写
设
这里不能写成
三类情形已穷尽所有原子步骤,反设协议不存在。一个进程直接决定自己的输入即可解共识,所以读写寄存器的共识数恰为1。增加寄存器数量、容量或本地计算不会破坏上述论证;增加一次能读取旧值的原子更新则会改变关键情形。
返回值和进展条件改变了什么
有限位宽、可能回绕的机器 CAS 是否保持抽象类型的全部能力,要看对象规格与可用内存模型。硬件吞吐、缓存争用和 ABA 风险影响实现性能与安全证明,却不改变理想原子 CAS 类型的经典共识数;若接口改成可能伪失败、只比较受限状态或允许非线性行为,就必须重新分类。
推论与应用
共识层级解释了读改写原语之间并非只有性能差异。它为无锁数据结构给出选择下界,也说明为什么从弱原语实现强对象时,算法常不得不降低进展保证、限制参与者数量或引入更强硬件操作。
分类结论不能反向代替具体算法证明。一个原语共识数足够高,只表示存在通用 wait-free 构造;实际队列或栈仍需证明线性一致性、步骤界和内存回收。相反,某对象无法用低层原语 wait-free 实现,也不排除使用互斥锁、随机化或特定调度假设得到可用实现。
上述证明和FLP都用双价与不可区分性,但模型不同:这里是共享原子寄存器与个体wait-free,FLP处理可靠消息传递与公平无限执行。前者不是把后者换几个名词所得的直接推论。[1, §3.7] 随机共识再把终止改为对规定调度器以概率1成立,同时保留逐执行的安全性;它也不反驳此处的确定性下界。
参考资料
[1] Maurice Herlihy, “Wait-Free Synchronization”, ACM TOPLAS 13(1), 1991, pp.124–149,DOI 10.1145/114005.102808:§2.3的wait-free定义、§3.1 Theorem2的寄存器下界、§3.7的消息/共享内存模型区别。本页逐项展开初始输入链、临界配置存在性与所有读写配对。
[2] Maurice Herlihy and Nir Shavit, The Art of Multiprocessor Programming, rev. 1st ed., Morgan Kaufmann, 2012,Ch. 5。
[3] Hagit Attiya and Jennifer Welch, Distributed Computing: Fundamentals, Simulations, and Advanced Topics, 2nd ed., Wiley, 2004,共享内存可解性相关章节。