Appearance
死锁(Deadlock)
死锁是指多个任务互相等待对方释放资源,导致所有任务都无法继续。
经典场景
任务 A 占有资源 1 等待资源 2,任务 B 占有资源 2 等待资源 1:
A: 持有 1,等待 2
B: 持有 2,等待 1双方都在等待,系统卡住。
产生死锁的四个条件(经典说法)
- 互斥:资源同一时间只能被一个任务占用。
- 占有并等待:任务占有资源,同时等待其他资源。
- 不可剥夺:资源不能被强行夺走。
- 循环等待:任务之间形成等待环。
四个条件同时满足时容易发生死锁。
如何避免(概念层面)
- 统一资源获取顺序(打破循环等待)。
- 限制一次持有多个资源。
- 增加超时机制,放弃等待。
与 JavaScript 的关系
JavaScript 主线程通常不直接写锁,但在多线程(Worker/后端)或数据库事务中非常常见。