NOTE

2.6 死锁

1. 死锁是什么 A占有了锁1,需要锁2,B占有了锁2,需要锁1 2. 死锁的必要条件 - 互斥:资源不可共享,即同一时间我占有了这个资源你就不能占有 - 占有和等待:我占有了资源A之后,还想去占有资源B - 不可抢占:此刻我占有了这个资源,你就不能抢占 - 循环等待:我占有了资源A等待资源B,你占

Operating System / Linux创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 死锁是什么

A占有了锁1,需要锁2,B占有了锁2,需要锁1

2. 死锁的必要条件

  • 互斥:资源不可共享,即同一时间我占有了这个资源你就不能占有
  • 占有和等待:我占有了资源A之后,还想去占有资源B
  • 不可抢占:此刻我占有了这个资源,你就不能抢占
  • 循环等待:我占有了资源A等待资源B,你占有了资源B在等待资源A,我们都在相互等待对方的资源

3. 死锁的处理方法

主要有四种处理方法:

3.1. 鸵鸟策略

不采取任何措施,直接忽视。 使用场景:当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低

  • 这个策略也是大部分系统的实现

3.2. 死锁检测与死锁恢复

不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复

通过资源分配图检测死锁,通过抢占恢复、回滚恢复、杀死进程恢复等方法进行死锁恢复

PG: 数据库死锁.md(关联笔记尚未公开)

3.3. 死锁预防

预防发生死锁,破坏死锁的四个条件即可

  1. 破坏互斥条件:允许资源共享
  2. 破坏占有和等待条件:一次性请求所有需要的资源而不是一个个申请
  3. 破坏不可抢占条件:改成可以抢占
  4. 破坏循环等待:给资源统一编号,进程只能按编号顺序来请求资源

3.4. 死锁避免

银行家算法

4. 参考