Skip to content

死锁(Deadlock)

死锁是指多个任务互相等待对方释放资源,导致所有任务都无法继续。

经典场景

任务 A 占有资源 1 等待资源 2,任务 B 占有资源 2 等待资源 1:

A: 持有 1,等待 2
B: 持有 2,等待 1

双方都在等待,系统卡住。

产生死锁的四个条件(经典说法)

  1. 互斥:资源同一时间只能被一个任务占用。
  2. 占有并等待:任务占有资源,同时等待其他资源。
  3. 不可剥夺:资源不能被强行夺走。
  4. 循环等待:任务之间形成等待环。

四个条件同时满足时容易发生死锁。

如何避免(概念层面)

  • 统一资源获取顺序(打破循环等待)。
  • 限制一次持有多个资源。
  • 增加超时机制,放弃等待。

与 JavaScript 的关系

JavaScript 主线程通常不直接写锁,但在多线程(Worker/后端)或数据库事务中非常常见。

CC-BY 4.0 Licensed