NOTE
2.6 死锁
1. 死锁是什么 A占有了锁1,需要锁2,B占有了锁2,需要锁1 2. 死锁的必要条件 - 互斥:资源不可共享,即同一时间我占有了这个资源你就不能占有 - 占有和等待:我占有了资源A之后,还想去占有资源B - 不可抢占:此刻我占有了这个资源,你就不能抢占 - 循环等待:我占有了资源A等待资源B,你占
这是历史学习笔记,可能存在过时或不完整的理解。
1. 死锁是什么
A占有了锁1,需要锁2,B占有了锁2,需要锁1
2. 死锁的必要条件
- 互斥:资源不可共享,即同一时间我占有了这个资源你就不能占有
- 占有和等待:我占有了资源A之后,还想去占有资源B
- 不可抢占:此刻我占有了这个资源,你就不能抢占
- 循环等待:我占有了资源A等待资源B,你占有了资源B在等待资源A,我们都在相互等待对方的资源
3. 死锁的处理方法
主要有四种处理方法:
3.1. 鸵鸟策略
不采取任何措施,直接忽视。 使用场景:当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低
- 这个策略也是大部分系统的实现
3.2. 死锁检测与死锁恢复
不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复
通过资源分配图检测死锁,通过抢占恢复、回滚恢复、杀死进程恢复等方法进行死锁恢复
PG: 数据库死锁.md(关联笔记尚未公开)
3.3. 死锁预防
预防发生死锁,破坏死锁的四个条件即可
- 破坏互斥条件:允许资源共享
- 破坏占有和等待条件:一次性请求所有需要的资源而不是一个个申请
- 破坏不可抢占条件:改成可以抢占
- 破坏循环等待:给资源统一编号,进程只能按编号顺序来请求资源
3.4. 死锁避免
银行家算法