当先锋百科网

首页 1 2 3 4 5 6 7

死锁和如何解决死锁思路

死锁

进程A占有a资源 希望获得进程B占有的b资源,进程B希望获得a资源,A,B对占有资源不会释放,也不能抢占 造成一直等待的情况

形成死锁的四个必要条件

  • 互斥条件: 一个资源每次只能被一个进程使用
  • 请求与保持条件: 一个进程因请求资源而阻塞时,对已获得的资源保持不放
  • 不剥夺条件: 进程已获得的资源,在未使用完之前,不能强行剥夺
  • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系

处理死锁的思路

  • 预防死锁
    • 破坏上面提及的四个条件中的一个或多个,互斥条件,允许一个资源被同时访问(不太好) 请求与保持条件、不剥夺条件 出现优先级关系,会导致某些级别低的进程长时间无法获得资源
  • 避免死锁
    • 在资源动态分配的过程中,用某种方式防止系统进入不安全的状态
  • 检测死锁
    • 允许死锁发生,检测是否有死锁出现,然后解开
  • 解除死锁
    • 发送死锁后,撤销进程,回收资源,分配给正在阻塞状态的进程

预防死锁的方法

  • 破坏请求和保持条件
    • 一次性的申请所有资源,之后不再申请资源,如果不满足资源条件则得不到资源分配
    • 只获得初期资源运行,之后将运行完的资源释放,请求新的资源
  • 破坏不可抢占条件
    • 当一个进程获得某种不可抢占的资源,提出新的资源申请,若不能满足,则释放所有资源,以后需要,再次重新申请
  • 破坏循环等待条件
    • 对资源进行排号,按照序号递增的顺序请求资源,若进程获得序号高的资源想要获取序号低的资源,就需要先释放序号高的资源 (保证稀有资源都是后面获取的?)

死锁的解除办法

  • 抢占资源,从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以解除死锁状态
  • 终止(撤销)进程: 将一个或多个死锁进程终止(撤销),直到打破循环环路,使系统从死锁状态解脱