Skip to content

互斥锁

Mutex · Mutex lock · 互斥量

以所有权和阻塞语义封装临界区互斥的同步对象。

形式陈述

互斥锁把互斥这一安全规格实现为一个可调用的同步对象。对线程集合 P,最小抽象状态可写成

M{unlocked}{owned(i):iP}.

线程 i 调用 lock_i 时,若 M=unlocked,操作把状态原子地改为 owned(i) 并成功返回;否则调用保持未完成,直到实现允许它取得锁。unlock_iowned(i) 改回 unlocked。在带所有者检查的接口中,ij 时由线程 jowned(i) 执行 unlock_j 是非法操作。可选的 try_lock_i 只尝试一次:锁空闲时取得所有权,否则返回失败而不等待。

成功 lock 的线性化点是所有权从空闲转给调用者的原子时刻;unlock 的线性化点是所有权被释放的时刻。由状态唯一性立即得到互斥不变量:任何可达状态至多有一个所有者。但这项安全性不推出任何进展结论。若持锁者停止、等待者永远不被选择,或者多把锁形成循环等待,互斥仍可能始终成立,而系统已经失去活性

递归锁是否允许同一线程重复获取、非所有者释放如何处理、等待队列是否 FIFO,以及是否提供有界等待,都是具体接口的契约,不属于“mutex”一词自动携带的性质。普通 mutex 通常是阻塞式的:获取失败的线程进入等待状态,由调度器转去运行别的线程;“失败后继续占用处理器轮询”则是自旋锁的实现语义。

在语言或硬件提供的同步接口中,成功获取通常具有 acquire 语义,释放通常具有 release 语义。于是同一把锁上先前 release 与随后成功 acquire 之间可建立可见性顺序;确切的读写可见范围仍由目标内存一致性模型规定,不能仅凭“使用了锁”跨语言推导统一的 happens-before 规则。

直觉

可以把互斥规格想成“房间里最多一人”,把互斥锁想成带钥匙登记的房门。锁不仅限制人数,还记录谁拿到了钥匙,规定何时归还,并决定没有钥匙的人是睡眠等待、立即失败还是持续轮询。正因多了这些操作语义,mutex 才能作为程序接口;它却没有凭空增强底层安全目标。

可睡眠 mutex 适合临界区可能持续较久的场景。线程发现锁已占用后暂停,CPU 可以执行持锁者或其他任务;代价是入队、调度和唤醒可能比短临界区本身更贵。是否值得阻塞取决于等待时长、调度成本与运行环境,而不是由“mutex 比 spinlock 高级”这样的标签决定。

例子与边界

设多个工作线程更新同一张内存索引。每个线程先 lock(m),在临界区内同时修改索引表和元素计数,最后 unlock(m)。锁的互斥性排除了两个更新在中途交错;若释放与获取具有相应内存序,后继持锁者也能观察前任完成的修改。这里仍需保证所有访问都遵守同一同步协议:某条旁路代码若不加锁直接写计数,整个程序依然可能产生数据竞争或破坏索引不变量。

持锁线程在临界区内永久崩溃时,状态可能永远停在 owned(i)。其他线程继续正确调用 lock,却都无法完成;互斥安全性没有被破坏,进展性已经丧失。某些系统提供 robust mutex 或外部恢复协议来识别失主并修复共享状态,但那是额外的故障模型与恢复机制,不能算作普通锁的固有保证。

初值为一的二元信号量也能把并发进入数限制为一,却通常不记录“哪个线程拥有许可”:一个线程可以等待,另一个线程可以发出许可。这使它适合事件交接,却不自动具有 mutex 的所有者检查、递归约定或优先级继承语义。两者产生相似的容量效果,不代表接口可以无条件互换。

推论与应用

互斥锁把抽象安全条件连接到操作系统与语言的同步 API。条件变量依靠 mutex 在检查共享谓词与进入等待之间关闭丢失唤醒窗口;monitor 再把锁、条件队列和受保护状态封装在同一模块中。多把锁组合时,还需用固定锁序、一次性获取或检测恢复来处理死锁,并单独检查公平与饥饿

性能分析也必须落在实际竞争形态上:临界区长度、持锁者是否可能被抢占、等待者数量和缓存流量共同决定成本。锁粒度过粗会压低并发度,过细则增加协调次数并放大组合错误;两种选择都不改变 mutex 的抽象状态机,只改变程序建立更大不变量的方式。

参考资料
  • The Open Group, POSIX Threads, “Mutexes” 与 pthread_mutex_lock/pthread_mutex_unlock 规范。
  • Maurice Herlihy and Nir Shavit, The Art of Multiprocessor Programming, rev. 1st ed., Morgan Kaufmann, 2012,Ch. 7。
  • Linux Kernel Documentation, “Locking” 与 “Lock types and their rules”。