# 死锁

# 死锁的必要条件

  • 互斥条件:进程间互相使用资源,资源具有独占性,在一段时间内,资源仅为一个进程占有
  • 不可剥夺条件:进程访问完资源前不能被其他进程强行剥夺
  • 部分分配条件:申请新资源时,不释放已占有的资源
  • 环路条件:多个进程构成环路

# 解决死锁的策略

  • 预防死锁
  1. 破坏互斥条件(难):资源固有排他性
  2. 破坏不剥夺条件(代价高):会造成系统及其不稳定
  3. 破坏部分分配条件(预先静态分配算法)
  4. 破坏环路条件(有序资源分配算法)
  • 避免死锁
    不事先采取限制去破坏产生死锁的条件,而是在资源分配中,用某种方法去评估,如果分配资源是否会让系统陷入死锁,如果是,则拒绝分配资源,从而避免死锁发生(银行家算法)

  • 检测和恢复死锁
    允许死锁发生,但可以通过检测机制及时检测出死锁状态,并精确确定与死锁有关的进程和资源,然后采取适当措施,将系统中已发生的死锁清除,将进程从死锁中解放出来

# 预先静态分配法

一个进程只有等到所有资源都备齐后才开始执行

# 有序资源分配法

给系统中的每个资源都分配一个序号,进程每次申请资源的时候只能申请序号更大的资源

例如:进程A和进程B,使用资源的顺序分别是R1,R2和R2,R1,如果采用有序资源分配法,则进程A和进程B申请资源的顺序均为R1、R2

# Windows和Linux都不处理死锁,留给用户去处理!!