Skip to content

互斥

Mutual exclusion

临界区任意时刻至多容纳一个进程;完整问题通常另规定进入进展条件。

条目类型
定义

形式陈述

设每个进程循环经过 remainder、entry、critical 与 exit 区。互斥的安全条件是

 reachable states,#{i:i 位于 critical section}1.

完整互斥问题通常另要求无死锁无饥饿或有界等待等进展性质;这些并不蕴含于上式。

直觉

互斥是临界区占用数至多一的不变量,而“有人最终能进去”“每个等待者最终能进去”分别是更强的活性与公平条件。把这些性质拆开,可以看清一个算法是因冲突规则错误破坏安全,还是因调度、崩溃或服务顺序失去进展。互斥锁是带获取、释放与所有权的同步对象;互斥规格也可由消息令牌或其他原子对象实现,二者不能互作同义词。

例子与边界

单个布尔变量 busy 上的“先读 false,再写 true”若读写之间非原子,两个线程可同时通过,违反互斥。Peterson 两进程算法在顺序一致且读写原子的模型下兼顾互斥与进展,但不能不加说明地移植到弱内存或任意数量进程。

具体锁实现的边界由自旋锁页承接:TAS 依赖原子读改写,ticket lock 增加请求顺序,却仍受抢占、缓存争用和调度假设影响。持锁线程停止时互斥安全性仍可成立,而阻塞、死锁与恢复属于锁对象及执行模型的进展分析。

推论与应用

互斥本身是一条安全性与活性中的安全性质:任何时刻至多一个进程在临界区。无死锁、无饥饿和有限等待属于不同强度的活性条件。

把计数信号量初始化为一,并令 P/waitV/signal 原子化,可以实现临界区入口的互斥:成功减到零的线程进入,其余线程等待,退出时再释放。该实现只给出容量约束;公平唤醒、优先级反转、进程崩溃后的许可恢复和可重入性仍需额外协议。

共享内存系统可用原子操作维护互斥不变量,读改写原语则实现具体锁入口。阻塞 mutex忙等锁共享互斥目标,却采用不同等待策略;死锁饥饿/公平再分别刻画全局等待闭环与个体服务保证。

数据库和操作系统还需把互斥与优先级反转、故障恢复及临界区粒度共同设计。这些工程约束不改变“临界区至多一人”的核心公式,却决定实现能否持续提供服务。

参考资料
  • Maurice Herlihy and Nir Shavit, The Art of Multiprocessor Programming, rev. 1st ed., Morgan Kaufmann, 2012,Chs. 2, 7。
  • Hagit Attiya and Jennifer Welch, Distributed Computing: Fundamentals, Simulations, and Advanced Topics, 2nd ed., Wiley, 2004,Chs. 4–5。
关系图谱10 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

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