Skip to content

原则Principle

安全性与活性

施工中 · 内容逐步修订

Safety and liveness · Correctness properties

把系统正确性分为坏事永不发生与好事最终发生两类性质。

形式陈述 ​

固定事件或状态字母表 Σ,并先取无限迹宇宙 Ω⊆Σω。系统性质是迹集合 P⊆Ω;Ω 上采用由有限前缀生成的相对前缀拓扑。记 u≺σ 表示有限迹 u 是无限迹 σ 的前缀,并令 Pref(Ω) 为 Ω 中迹的所有有限前缀。

性质 P 是安全性质,当且仅当每条违反它的迹都有一个不可修复的有限坏前缀:

∀σ∈Ω∖P,∃u≺σ,∀ρ∈Ω,u≺ρ⟹ρ∉P.

性质 P 是活性质,当且仅当任意合法有限前缀仍能扩展为某条满足性质的迹:

∀u∈Pref(Ω),∃ρ∈P,u≺ρ.

若取 Ω=Σω,第二式就是通常写作“对每个 u∈Σ∗ 都存在满足性质的无限延伸”。对具体系统,Ω 必须明确纳入哪些调度、故障、消息交付和公平性假设;改变这个执行宇宙,会改变同一句话是否构成活性保证。

直觉

安全性约束“坏事永远不会发生”。一旦有限历史已经出现两个进程同时进入临界区,任何未来都无法删除这个事实;这段历史已经是完整的反证。这里判断的是整条历史,而非当前状态:后来只剩一人,不能使已经违规的历史重新合格。

活性定义说“每个前缀存在一个好延伸”,不是说任意延伸都成功。前者用来分类性质;证明实现满足该性质,则要证明实现的每条可容许执行都在 P 中。展示一次成功运行,不能代替这个全称证明。

活性关心承诺能否在无限执行中兑现。单凭一次请求已经等待很久,仍不能断言它永远不会完成;只有连同公平调度、消息最终送达等执行假设,才能排除永久拖延。永不响应的系统可以很安全却毫无活性,快速给出矛盾结果的系统则可能持续进展但不安全。

安全性的有限坏前缀与活性的可延伸前缀
例子与边界

互斥锁的安全性是任意时刻至多一个进程进入临界区;若观察到两个进程同时进入,有限执行前缀已经永久否证它。无饥饿性则要求合格的持续请求者最终进入临界区,正如“每个请求最终得到响应”一样属于活性:无论已经等待多久,都还不能据此断言它永远不会发生。

在记录时间的迹模型中,“每个请求在 100 ms 内完成”是安全性质:一旦时钟越过截止时间仍未完成,就出现了不可修复的有限坏前缀。要实现或证明这项安全约束,通常还需时钟精度、调度和网络延迟等环境假设,但这些假设不是把性质重新分成安全与活性。死锁自由也不自动推出无饥饿:系统可能一直有某个线程进展,却永久忽略另一个线程。

推论与应用

在固定 Ω 及其前缀拓扑下,Alpern–Schneider 分解定理说明每个性质 P⊆Ω 都可写成安全性质 S 与活性质 L 的交,即 P=S∩L。分解一般不唯一。改变公平性、故障或调度假设会改变合法执行宇宙,也可能改变闭包、坏前缀和分类;有时限的请求响应会产生有限坏前缀,不能只凭“最终”二字归到活性一侧。

两类性质对应不同证明义务。在状态机上,安全性通常证明初态满足不变式且每一步保持它;违反时,一条到达坏状态的有限前缀已经足够。活性则量化无限执行,需要说明持续使能的动作为什么不能永远被推迟;违反时,反例通常包含可无限重复的环。公平性既可写进性质,也可通过可容许执行限制 Ω,但两种放置方式必须在结论中显式说明。

分解还可具体构造。令 S=P― 为前缀拓扑中的闭包,即其每个有限前缀都仍有满足 P 的延伸;令 L=P∪(Ω∖P―)。则 S 封闭而是安全性质,L 稠密而是活性质,且 S∩L=P。对任意前缀,若它有 P 中的延伸就已遇到 L;若没有,它的全部延伸都在闭包外,也遇到 L。这说明分解不是把每个需求句子硬贴成两类之一。

有限终止执行可通过无限重复末状态纳入上述模型;是否允许这种停顿,仍需在 Ω 中声明。具体并发术语也应回到各自页面核对完成事件、参与者量词和环境假设。

工作流网健全性把完成规格拆成任意可达状态仍可完成、到达终点时无残留、没有永久死任务。这里“仍可完成”是每个状态存在一条好未来;带重试循环的健全流程仍可能在不公平选择下永远不退出,不能据此宣称所有执行都终止。

参考资料
  • Bowen Alpern and Fred B. Schneider, “Defining Liveness,” Information Processing Letters 21(4), 1985, pp. 181–185;给出有限前缀定义与性质分解。
  • Bowen Alpern and Fred B. Schneider, “Recognizing Safety and Liveness,” Distributed Computing 2, 1987, pp. 117–126;给出拓扑识别条件,并系统化 safety–liveness 分解。
  • Leslie Lamport, “Proving the Correctness of Multiprocess Programs,” 1977.
关系图谱21 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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