ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

死锁产生的的四个必要条件

2022-03-10 11:02:01  阅读:187  来源: 互联网

标签:请求 占有 死锁 必要条件 条件 进程 四个 资源


死锁产生的的四个必要条件

1.互斥条件

某一种资源一次只允许一个进程占有,也就是当资源被分配后,其他进程就无法访问该资源,直到当前占有资源的进程访问结束。

2.请求与保持条件

一个进程因请求某一资源而进入阻塞队列而等待,没有释放本身进程就占有的资源。

3.不剥夺条件

进程占有资源之后,在对该资源没有使用完之前,不能强行剥夺。

4.循环等待条件

多个进程之间形成一种头尾相接循环等待资源关系。

破坏产生死锁的条件

1.破坏“请求与保持条件”

方法一:所有进程运行开始之前,必须一次性申请其在整个运行期间所需要的资源。

优点:简单、易操作、安全。

缺点:进程的资源申请变困难,会使进程无法启动,资源利用率低,使进程出现饥饿现象。

方法二:允许程序只申请最开始需要的一些资源并开始启动,在执行之后,及时释放掉已经使用过的资源,再去请求新资源,这样可以提高资源利用率。

2.破坏“不剥夺条件”

当一个进程已经占有一些资源,再去申请新的资源而没有得到满足,则必须要释放掉所有自己已经占有的所有资源,这样就相当于这些资源是被剥夺掉的,从而破坏了“不剥夺条件”。

缺点:实现起来复杂,代价较大,释放掉所有资源可能使该进程无法正常进行下去,影响进程的周转周期,降低吞吐量。

3.破坏“循环等待条件”

只申请资源编号比进程编号大的资源(是为按单调递增或单调递减的序号去申请资源),可以防止资源请求形成一个首尾相接的环。

需要注意的是,“互斥条件”的破坏只有在资源可以共享的情况下,而资源的访问一般都是互斥的,所以在此省略。
破坏死锁产生的四个必要条件就是预防死锁。

避免死锁

方法一:如果一个进程的请求会导致死锁,那么就不启动该进程。

方法二:如果一个进程请求增加的资源会导致死锁,那么就拒接该资源请求。

银行家算法:

避免死锁的优点:不需要死锁预防中的抢占和重新运行进程,并且比死锁预防的限制要少。

死锁避免的限制:

1)必须事先声明每个进程请求的最大资源量

2)考虑的进程之间是必须无关的,也就是说,它们执行的顺序必须没有任何同步要求的限制

3)分配的资源数目必须是固定的

4)在占有资源时,进程不能退出

死锁的检测

资源分配图形成一个环,那么会形成死锁。需要注意的是资源分配的弧(边)要进行简化,即是否可以满足。

遍历每个节点,以每个结点为根节点去遍历子节点,若访问到相同的结点那么就是存在死锁。

死锁的解除

1)抢占:将某一资源从一个进程给另一个进程使用之后再给送回。

2)回滚:周期性对进程进行检查点检查,即将进程的状态写入一个文件以备以后重启,包括存储映象、资源状态,即哪些资源分配给了哪些进程。新的检查点不覆盖原有的文件,而是写到新文件中。检测到死锁时,从一个较早的检查点开始,将该进程复位到更早的状态。

3)杀死进程:杀死环中的一个或多个进程;杀死一个环外的进程以释放该进程的资源。(最好杀死可以从头开始重新运行且不会带来副作用的进程)

标签:请求,占有,死锁,必要条件,条件,进程,四个,资源
来源: https://www.cnblogs.com/secuy/p/15988561.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有