Skip to content

并发程序精化

Concurrent program refinement · Concurrent contextual refinement

在明确客户环境与观测投影下,要求并发实现的每条可见行为都由抽象规格的一条行为匹配。

条目类型
定义

形式陈述

设并发实现为 I,抽象规格为 A,允许的客户上下文集合为 K。选定观测函数 obs,隐藏锁、CAS 重试和其他内部事件,只保留契约声明的调用、返回、异常或终止信息。上下文精化可定义为

IKAKK.ObsBeh(K[I])ObsBeh(K[A]).

点态量词是

βIBeh(K[I]).βABeh(K[A]).obs(βI)=obs(βA).

方向与现有 系统精化关系 一致:实现不能增加规格禁止的可观察行为,但可以消除内部非确定选择。它不要求每条抽象行为都由实现实现。行为究竟取有限前缀、最大有限执行还是公平无限执行,必须在 轨迹与路径语义 中固定;改变这一选择会改变精化命题。

状态模拟是证明上述包含的充分工具。关系把具体状态关联到抽象状态,每个具体步由抽象步或允许的停顿匹配,调用与返回投影一致。模拟不是定义本身,也未必在没有辅助状态或反向推理时完备。

直觉

精化不是比较两份代码“看起来是否相似”,而是给观察者设一场辨认测试。若任何许可客户看到实现产生的一段行为,都能在规格世界找到相同观察,那么客户不能用契约允许的手段证明实现越界。内部多走几步、改变表示或固定某个合法选择都可以被隐藏。

客户集合和观察接口不可省略。锁内暂时破坏的数据关系,对只能经锁访问的客户可能完全不可见;同一实现面对能无锁读取内部字段的监控线程却可能泄露中间状态。所谓“实现精化规格”总是相对于谁能看、能看见什么以及调度允许什么。

例子与边界

抽象对象提供原子 swap(x,y),从状态 (1,2) 一步转到 (2,1)。具体实现取得同时保护两格的排他锁后执行

text
t := x
x := y
y := t

内部状态轨迹经过 (1,2)(2,2)(2,1)。若 K 中所有客户只能通过同一把锁保护的 API 观察这两个值,(2,2) 属于隐藏的内部状态;调用前后的可见行为与抽象原子 swap 匹配,因而这段实现可以精化抽象规格。

若加入一个不取锁的 metrics 线程,它可能在两次写之间读到 (2,2)。抽象 swap 的任何轨迹都没有这个可见状态,于是存在具体行为找不到抽象见证,包含失败。修补证明不能只把该读取标成内部事件,因为它已进入客户观察;必须收紧客户契约、改变实现原子性或扩大规格允许行为。

只比较有限安全前缀还可能容忍无限内部循环:每个已经产生的可见前缀都合法,实现却永不返回。要保存终止、无饥饿或公平活性,需采用 divergence-sensitive 行为和对应调度假设。弱内存下,编译器与硬件还可能暴露顺序语义中不存在的读写观察,除非精化模型明确包含内存排序。

推论与应用

线性一致性可把并发对象的每段历史匹配到尊重实时顺序的原子顺序规格,因此在合适客户和内存模型下提供强有力的对象精化原则。它仍只约束安全历史;从线性一致性自动推出 contextual refinement 往往还需要客户数据竞争自由、调用接口封装和异常语义等条件。

并发精化支持逐层开发:无锁实现精化原子对象,原子对象再精化业务规格;每层隐藏不同内部事件。传递性要求各层观察字母表和发散约定兼容。若中间层把一个上层可见失败悄悄隐藏,简单套用集合包含并不能得到端到端结论。

参考资料
  • Maurice P. Herlihy and Jeannette M. Wing, “Linearizability: A Correctness Condition for Concurrent Objects,” ACM TOPLAS 12(3), 1990, pp. 463–492。
  • Ivana Filipović, Peter O’Hearn, Noam Rinetzky, and Hongseok Yang, “Abstraction for Concurrent Objects,” Theoretical Computer Science 411(51–52), 2010, pp. 4379–4398。
  • Nancy A. Lynch and Frits W. Vaandrager, “Forward and Backward Simulations: I. Untimed Systems,” Information and Computation 121(2), 1995, pp. 214–233。
  • Martín Abadi and Leslie Lamport, “The Existence of Refinement Mappings,” Theoretical Computer Science 82(2), 1991, pp. 253–284。
关系图谱11 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

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