**死锁是一种状态:两个或更多线程各自永远等待着其他线程持有的资源,因此没有一个能继续。**它需要四个条件同时成立(Coffman 条件)。
四个条件
- 互斥(Mutual exclusion) — 资源被独占持有。
- 持有并等待(Hold and wait) — 一个线程持有一个资源的同时又在等待另一个。
- 不可抢占(No preemption) — 资源不能被强行夺走。
- 循环等待(Circular wait) — 一圈线程,每个都在等待下一个。
打破其中任意一个,死锁就不可能发生。
text
线程 1 持有 A,想要 B ─┐
├─ 循环等待 → 死锁
线程 2 持有 B,想要 A ─┘
