深入理解死锁

死锁定义


死锁是指两个或两个以上的进程在执行过程中,由于资源竞争或者由于彼此通信而造成的一种阻塞现象,若无外力作用,他们都将无法推进下去,此时称系统处于死锁状态,这些永远在互相等待的进程称为死锁进程。


死锁产生的四个必要条件


(1)最基本的条件是互斥条件,只有多个进程互斥的求访问同一个资源,才会导致某个资源不能被某些需要的进程所得到

(2)请求和保持条件:对于请求和保持条件我们可以这样理解,要产生死锁是由于申请资源的进程本身都已经拥有了一部分资源,而同时又去申请另外一些进程占有的自己所必须的条件,这样每个进程都在等待申请其他进程的资源,导致所有的进程都陷入到死等中;

(3)不可抢占条件:对于不可抢占条件也很容易理解,试想一下如果进程中有抢占的条件的话,那么优先级高的进程就会抢占到优先级低的进程的资源,这显然是不符合死锁的定义的,因此不可抢占条件是必不可少的;

(4)循环等待条件:为了方便我们的理解,可以以两个进程为例,类似于scoped_ptr中的循环引用问题;


死锁解除和避免算法:


本质:因为死锁必须满足四个必要条件,因此死锁的解除和避免主要是从破坏死锁的四个必要条件入手;


预防死锁


一般来说互斥条件是无法破坏的,所以在解除或者预防死锁时主要从其他三个方面入手

(1)破坏请求和保持条件


第一种协议:在所有进程开始运行之前,必须一次性的申请其在整个运行过程中的所有资源,这样便破坏了请求条件;只要一个进程中有一个资源不满足,必须释放他所占有的资源,这样便破坏了保持条件;


第二种协议:第二种协议是第一种协议的改进,它允许进程只要获得运行初期所需的资源后,便开始运行,在运行过程中在逐步释放已分配给自己的(破坏了保持条件),且已经用完的全部资源,然后再开始申请新的资源。


两种协议比较:第二种协议优于第一种协议,因为第一种协议会造成资源的严重浪费,使资源利用率大大的降低,也会由于占据大量资源导致其它进程的饥饿问题


(2)破坏不可抢占条件


方式一:当一个进程已经占有了某些不可抢占的资源时,又去申请新的资源而得不到满足时,就必须释放自己已经保持的所有资源(类似于上面的第一种协议中破坏保持条件),待以后需要的时候再重新申请;


方式二:如果系统中的进程的优先级不同时,当优先级高的进程去申请优先级低的进程所占据的资源时,操作系统就可以抢占优先级低的进程的资源;


(3)破坏循环等待条件


对系统所有资源进行线性排序并赋予不同的序号,这样我们便可以规定进程在申请资源时必须按照序号递增的顺序进行资源的申请,当以后要申请时需检查要申请的资源的编号大于当前编号时,才能进行申请。


解除死锁:


常用的解除死锁的两种方法


(1)抢占资源:从一个或者多个进程中抢占足够的资源,分配给死锁进程,用于解除死锁;

(2)终止(或撤销)进程:终止(或撤销)系统中的一个或者多个死锁进程,直至打破死锁循环环路,使系统从死锁中解除出来。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

double_happiness

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值