死锁的产生条件和预防处理[通俗易懂]

死锁的产生条件和预防处理

大家好,又见面了,我是全栈君。

       所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象。若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。因为资源占用是相互排斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续执行。这就产生了一种特殊现象死锁。


       尽管进程在执行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备下面四个必要条件。

1)相互排斥条件:

       指进程对所分配到的资源进行排它性使用,即在一段时间内某资源仅仅由一个进程占用。假设此时还有其他进程请求资源,则请求者仅仅能等待,直至占有资源的进程用毕释放。

2)请求和保持条件:

       指进程已经保持至少一个资源。但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程堵塞,但又对自己已获得的其他资源保持不放。

3)不剥夺条件:

      指进程已获得的资源,在未使用完之前,不能被剥夺,仅仅能在使用完时由自己释放。

4)环路等待条件:

      指在发生死锁时,必定存在一个进程——资源的环形链。即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源。P1正在等待P2占用的资源。……。Pn正在等待已被P0占用的资源。


在系统中已经出现死锁后,应该及时检測到死锁的发生,并採取适当的措施来解除死锁。眼下处理死锁的方法可归结为下面四种:

1) 预防死锁。

  这是一种较简单和直观的事先预防的方法。

方法是通过设置某些限制条件。去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。预防死锁是一种较易实现的方法,已被广泛使用。可是因为所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量减少。

2) 避免死锁。

  该方法相同是属于事先预防的策略。但它并不须事先採取各种限制措施去破坏产生死锁的的四个必要条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。

3)检測死锁。

  这样的方法并不须事先採取不论什么限制性措施。也不必检查系统是否已经进入不安全区,此方法同意系统在执行过程中发生死锁。

但可通过系统所设置的检測机构,及时地检測出死锁的发生,并精确地确定与死锁有关的进程和资源。然后採取适当措施,从系统中将已发生的死锁清除掉。

4)解除死锁。

  这是与检測死锁相配套的一种措施。当检測到系统中已发生死锁时。须将进程从死锁状态中解脱出来。

经常使用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于堵塞状态的进程。使之转为就绪状态,以继续执行。

死锁的检測和解除措施,有可能使系统获得较好的资源利用率和吞吐量,但在实现上难度也最大。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116453.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 【SQL】SQL中distinct的用法

    【SQL】SQL中distinct的用法转载自:https://www.cnblogs.com/leonlee/p/6042461.html1.作用于单列2.作用于多列3.COUNT统计4.distinct必须放在开头5.其他在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词distinct用于返回唯一不同的值。表A:表B:1.作用于

    2022年7月20日
  • 情感词典构建_晦涩情感词典

    情感词典构建_晦涩情感词典看到一篇文章写的很清楚简洁,直接转了。————————————————————————————————————————某主席说,“没有情感词典的“使用该情感词典进行情感分析”都是耍流氓。”某帝说,“要有情感词典。”

    2022年8月23日
  • ibm x201 怎么清理内部_联想 Thinkpad x201i怎么拆机清理风扇灰尘?_硬件教程「建议收藏」

    ibm x201 怎么清理内部_联想 Thinkpad x201i怎么拆机清理风扇灰尘?_硬件教程「建议收藏」笔记本散热风扇使用时间长了就累积很多灰尘,堵塞出风口,从而大幅降低散热效果。因此有必要对其清理。要彻底清理风扇灰尘,需要拆机方可。首先要把笔记本的电池取下。这款笔记本的硬盘仓很隐蔽,不过在D面还是有明显的图标提示,拧下螺丝和卡扣,即可看到硬盘。硬盘盖拆下来之后,只需用力的拔出黑带即可把硬盘取下。电池、硬盘、内存都取下之后,我们用螺丝刀把D壳周围的螺丝你拧下,之后就可以开始拆卸键盘以及外壳了。拆卸键…

    2022年6月27日
  • Intellij IDEA 安装lombok及使用详解

    Intellij IDEA 安装lombok及使用详解项目中经常使用bean,entity等类,绝大部分数据类类中都需要get、set、toString、equals和hashCode方法,虽然eclipse和idea开发环境下都有自动生成的快捷方式,但自动生成这些代码后,如果bean中的属性一旦有修改、删除或增加时,需要重新生成或删除get/set等方法,给代码维护增加负担。而使用了lombok则不一样,使用了lombok的注解(@Setter,@Getter,@ToString,@@RequiredArgsConstructor,@EqualsAndHas

    2022年6月17日
  • 如何使用Fiddler模拟弱网情况对app进行测试「建议收藏」

    前言很多时候,我们需要在弱网情况下,对app进行测试,不可能将app放置到离路由器很远的地方,这里可以模拟弱网来测试app。那么,我们这里使用Fiddler工具来模拟弱网。使用speedtest在线测速工具来测试网络。一、Fiddler工具连接手机,设置代理打开Fiddler,进入到Tools—>options,如图所示:再次选择Connection

    2022年4月10日
  • thinkphp漏洞检测工具_thinkphp渗透

    thinkphp漏洞检测工具_thinkphp渗透0x00前言由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本,推荐尽快更新到最新版本。0x01影响范围5.x<5.1.31,<=5.0.230×02漏洞分析Thinkphpv5.0.x补丁地址:https://github.com/top-think/framework/com…

    2022年10月24日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号