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

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

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

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


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

1)相互排斥条件:

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

2)请求和保持条件:

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

3)不剥夺条件:

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

4)环路等待条件:

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


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

1) 预防死锁。

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

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

2) 避免死锁。

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

3)检測死锁。

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

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

4)解除死锁。

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

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

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

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

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

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


相关推荐

  • WPF基础五:UI①布局元素WrapPanel[通俗易懂]

    WPF基础五:UI①布局元素WrapPanel[通俗易懂]目录WrapPanelWrapPanel类XAML范例:C#代码WrapPanel按从左到右的顺序位置定位子元素,在包含框的边缘处将内容切换到下一行。后续排序按照从上至下或从右至左的顺序进行,具体取决于Orientation属性的值。WrapPanel包含UIElement对象的集合,这些对象位于Children属性中。WrapPanel的所有子元素都接收ItemWidth与ItemHeight大小相乘的布局分区。WrapPanel类名称…

    2022年7月22日
    12
  • Eureka 的 Application Client client的执行演示样例

    Eureka 的 Application Client client的执行演示样例

    2021年12月16日
    46
  • Altium Designer——AD画PCB图步骤总结

    Altium Designer——AD画PCB图步骤总结AD画PCB图步骤总结本文总结一下AD画PCB的步骤,以防时间久了忘记一些小步骤。现在所用着的AD版本为AD17。电脑环境:AltiumDesigner17.1.5(build172)点这里下载,密码:rwsxAD画PCB图步骤:1、创建工程,新建“PrjPCB”文件。2、画原理图,新建“SchDOC”文件。画原理图时,如果没有的器件自己绘制原理…

    2022年7月15日
    21
  • 电脑usb android上网,让你的Android手机通过USB共享电脑上网

    电脑usb android上网,让你的Android手机通过USB共享电脑上网转贴:来自http://www.diypda.com/viewthread.php?tid=150277首先这不是一篇关于如何让你的Android手机通过USB共享电脑上网(这里不讨论这样做的必要性)的教程,所以很多细节上被省略了。没有图。我们知道,可以使用USB将HTCHero连接至PC,“连接类型”选择“Internet共享(假设你的手机移动网络可用并是打开的),然后你的电脑就会…

    2025年7月20日
    2
  • JS 创建对象(常见的几种方法)

    JS 创建对象(常见的几种方法)

    2021年9月15日
    40
  • [原译]AVALONDOCK 2.0入门指南第一部分「建议收藏」

    [原译]AVALONDOCK 2.0入门指南第一部分「建议收藏」AvalonDock2.0可以用来为WPF创建一个类似VisualStudio的界面,深入理解如何使用AvalonDock进行开发是很重要的。在这个入门指南里,我将演示如何开始使用AvalonDock,下面的文章都是基于2.0版本的。并且不能用于早期的版本。AvalonDock是一个组合的布局模型,很多的控件都在视图上显示,一个DockingManager类也显示在停靠区,用于可以拖…

    2022年7月20日
    16

发表回复

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

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