死锁的处理

  • 死锁
    多个进程由于互相等待对方持有的资源而造成的谁都无法执行的情况就是死锁
  • 死锁的产生原因
    资源的互斥使用,一旦占有别人无法使用
    进程占有了一些资源,又不释放,再去申请其他资源
    总结:几个进程各自占有的资源和互相申请的资源形成了环路等待

死锁的4个必要条件

在这里插入图片描述

死锁处理

在这里插入图片描述

1. 死锁预防

在这里插入图片描述
在这里插入图片描述

2. 死锁避免

每次都判断此次请求是否会引起死锁
在这里插入图片描述

  • 怎么找出安全序列呢?
    银行家算法
    在这里插入图片描述
    复杂度Tn=O(mn^2) m是资源数,n是进程数,可以看出,这样代价非常大,因为每次申请都得执行很长时间

调用银行家算法预测是否会发生死锁:
下图,p0申请(0,2,0),假设分配给它,发现分配之后其他进程一个都无法执行了,说明会产生死锁,就不能分配给它,拒绝此次申请
在这里插入图片描述
在这里插入图片描述

3. 死锁检测+恢复

在这里插入图片描述
但是进程的回滚又很难,比如下面的
在这里插入图片描述

4. 死锁忽略

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41386300/article/details/85235795