死锁产生的条件和解决死锁的方法

产生死锁的原因

  1. 系统资源不足
  2. 资源分配不当
  3. 进程推进顺序的不合理

产生死锁的四个必要条件

  1. 互斥条件:一个资源每次只能被一个进程使用。 (资源本身的特点,不可避免)
  2. 请求与保持条件:一个进程因请求资源而等待时,不会释放已分配的资源。
  3. 不剥夺条件:进程已获得的资源,在未使用之前,不能被强行剥夺。
  4. 循环等待条件:若干个进程之间形成头尾相连的循环等待资源的关系。

    只要产生死锁,这四个条件必定成立,若破坏其中一个条件,死锁就不会发生了。

解决死锁的方法

预防死锁

资源一次性分配:破坏请求和保持条件。 当某个资源只在进程结束时使用一小会,那么在进程运行期间,这个资源都被占用,资源利用率很低。比较好的方法是,进程开始时,只申请和使用进程启动的资源,在运行过程中不断申请新的资源,同时释放已经使用完的资源。
可剥夺资源:当进程新申请的资源不满足时,释放已经分配的资源。破坏不可剥夺条件。 在使用某些资源,比如打印机时,当强制剥夺已分配资源的时候,会导致打印机资源打印的信息不连续的问题。
资源有序分配:系统给进程编号,按某一顺序申请资源,释放资源则反序释放。破坏循环等待条件。

避免死锁

银行家算法:分配资源前先评估风险,会不会在分配后导致死锁。 即分配给一个进程资源的时候,该进程能否全部返还占用的资源。

检测死锁

建立资源分配表和进程等待表。

解除死锁

从其他进程强制剥夺资源给死锁进程。
可以直接撤销死锁进程,或撤销代价最小的进程。

猜你喜欢

转载自blog.csdn.net/qq_27068845/article/details/78818381