线程中的死锁

2018-07-02  本文已影响0人  福later

死锁定义:若一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的

产生死锁的必要条件:(以下4个条件任一个不成立,死锁就不会发生)
(1)互斥条件:在一段时间内,某资源只能被一个进程占用;
(2)请求和保持条件:进程已拥有了至少一个资源,但又提出了新的资源请求,而该资
源已被其它进程占用,此时请求进程被阻塞,但对自己已获得资源保持不放;
(3)不可抢占条件:进程已获得资源在未使用完之前不能被抢占,只能进程使用完之后
自己释放;
(4)循环等待条件:进程集合{p0,p1,p2,...}中p0在等待一个被p1占用的资源,p1等待一
个被p2占用的资源,...pn等待被p0占用的资源;
如何预防死锁?
(1)破坏“请求和保持”条件
第一种协议:所有进程在开始运行之前,必须一次性地申请其在整个运行过程所需
要的全部资源;
第二种协议:它允许一个进程只获得运行初期所需的资源后,便开始运行。进程运
行过程中再逐步释放已分配给自己的、且已用完的全部资源,然后再请求新的所需
资源;
(2)破坏“不可抢占”条件
当一个已经保持了某些不可被抢占资源的进程,提出新的资源请求而不能得到满足
时,它必须释放已经保持的所有资源,待以后需要时再重新申请;
(3)破坏“循环等待”条件
对资源进行线性排序,并赋予不同的序号,规定每个进程必须按序号递增的顺序请
求资源;
如何避免死锁?
系统处于安全状态时,可避免死锁的发生。
安全状态:指进程能够按照某种进程推进顺序(p0,p1,p2,...)为每个进程pi分配其
所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺序地完成,此
时称(p0,p1,p2,...)为安全序列,若进程中找不到这样一个安全序列,则进程处于
不安全状态,进程处于不安全状态,易造成死锁。
可利用银行家算法避免死锁;
银行家算法思想:每一个进程在运行之前,必须申明在运行过程中,可能需要的每
种资源类型的最大单元数目,其数目不应超过系统所拥有的资源总量,当进程请求
一些资源时,系统必须首先确定是否有足够的资源分配给该进程,若有,再进一步
计算在将这些资源分配给进程后,是否会使系统处于不安全状态,若不会,才将资
源分配给它,否则让进程等待。

上一篇下一篇

猜你喜欢

热点阅读