zoukankan      html  css  js  c++  java
  • 2、死锁形成的原因和四个必要条件?

    死锁:两个或两个以上的进程/线程在运行过程中争夺资源而造成的一种僵局,导致这些进程/线程都无法向前推进,这时就形成了死锁

    eg:有一个狭窄的路口,A车与B车相遇了,A在等B避让,B也在等A避让,这时候就形成了死锁。

    死锁产生的原因

    先看两个概念:可抢占资源和不可抢占资源

    可抢占资源:指某进程在获得这类资源后,该资源可以再被其他进程或系统抢占,对于这类资源是不会引起死锁的,eg:CPU和主存

    不可抢占资源:一但系统把某资源分配给该进程后,就不能将它强制收回,只能等进程s使用完后自行释放。eg:打印机

    死锁产生的原因:

    (1)竞争不可抢占资源; eg:共享文件时引起死锁,系统中有两个进程 P1 和 P2 , 它们都准备写两个文件 F1 和 F2,而这两个文件都属于可重用的不可抢占资源,

    若进程 P1 在打开 F1的的同时,进程P2 打开了F2。当P1想打开F2的时候,由于F2被占用而阻塞;当P2想打开F1时,由于F1被占用而阻塞。此时就会无限等待下去,形成死锁。

    (2)进程推进顺序不当时也会引起死锁

    产生死锁的四个必要条件

    (1)互斥条件:进程对所分配到的资源不允许其他进程访问,若其他进程要访问,只能等待,直至占有该资源的进程使用完成后释放该资源。

    (2)请求和保持条件:进程获得一定资源后,又对其他资源发出请求,但是该资源可能被其他进程占有,此时请求阻塞,但又对自己获得的资源保持不释放。

    (3)不可剥夺条件:是指进程已获得的资源,在未完成使用之前,不可被剥夺,只能在使用完成后自己释放。

    (4)循环等待条件:是指进程发生死锁后,必然存在一个进程-资源之间的环形链

    处理死锁的基本方法

    (1)预防死锁:通过设置一些限制条件,去破坏一个或多个死锁的必要条件。

    (2)避免死锁:在资源分配的过程中,使用某种发放避免系统进入不安全的状态,从而避免死锁

    (3)检测死锁:允许死锁的发生,但是通过系统的检测之后,采取一些措施,讲死锁清除掉

    (4)解除死锁:当检测出死锁后,便采取适当措施将进程从死锁状态中解脱出来。

  • 相关阅读:
    Hibernate的一些操作
    工作心得
    放款流程
    关于C#事件的自我构想和学习
    委托之winForm窗口间传递数据
    C#中string[]数组和list<string>泛型的相互转换 【转】
    关于注册界面中的一些规则设计时要注意
    系统界面设计---风格
    关于系统注册,做卡号重校验
    关于系统设计中的硬件开发
  • 原文地址:https://www.cnblogs.com/yxcn/p/15043932.html
Copyright © 2011-2022 走看看