美文网首页
死锁原因及解决、避免办法

死锁原因及解决、避免办法

作者: 95a6af369245 | 来源:发表于2019-02-13 17:26 被阅读128次

死锁的条件

互斥条件(Mutual exclusion) :资源不能被共享,只能由一个进程使用。

请求与保持条件(Hold and wait):进程已获得了一些资源,但因请求其它资源被阻塞时,对已获得的资源保持不放。

不可抢占条件(No pre-emption) :有些系统资源是不可抢占的,当某个进程已获得这种资源后,系统不能强行收回,只能由进程使用完时自己释放

循环等待条件(Circular wait) :若干个进程形成环形链,每个都占用对方申请的下一个资源

处理死锁的策略

1、忽略该问题。例如鸵鸟算法

2、检测死锁并且恢复。

3、仔细地对资源进行动态分配,以避免死锁。

4、通过破除死锁四个必要条件之一,来防止死锁产生。

鸵鸟算法:

该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。

银行家算法:

所谓银行家算法,是指在分配资源之前先看清楚,资源分配后是否会导致系统死锁。如果会死锁,则不分配,否则就分配。

按照银行家算法的思想,当进程请求资源时,系统将按如下原则分配系统资源:

(1) 当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程。

(2) 进程可以分期请求资源,当请求的总数不能超过最大需求量。

(3) 当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使进程在有限的时间里得到资源。

(4) 当系统现有的资源能满足进程尚需资源数时,必须测试系统现存的资源能否满足该进程尚需的最大资源数,若能满足则按当前的申请量分配资源,否则也要推迟分配。

解决死锁的策略

对待死锁的策略主要有:

(1) 死锁预防:破坏导致死锁必要条件中的任意一个就可以预防死锁。例如,要求用户申请资源时一次性申请所需要的全部资源,这就破坏了保持和等待条件;将资源分层,得到上一层资源后,才能够申请下一层资源,它破坏了环路等待条件。预防通常会降低系统的效率。

(2) 死锁避免:避免是指进程在每次申请资源时判断这些操作是否安全,例如,使用银行家算法。死锁避免算法的执行会增加系统的开销。

(3) 死锁检测:死锁预防和避免都是事前措施,而死锁的检测则是判断系统是否处于死锁状态,如果是,则执行死锁解除策略。

(4) 死锁解除:这是与死锁检测结合使用的,它使用的方式就是剥夺。即将某进程所拥有的资源强行收回,分配给其他的进程。

死锁的避免:

死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。

死锁产生的前三个条件是死锁产生的必要条件,也就是说要产生死锁必须具备的条件,而不是存在这3个条件就一定产生死锁,那么只要在逻辑上回避了第四个条件就可以避免死锁。

避免死锁采用的是允许前三个条件存在,但通过合理的资源分配算法来确保永远不会形成环形等待的封闭进程链,从而避免死锁。该方法支持多个进程的并行执行,为了避免死锁,系统动态的确定是否分配一个资源给请求的进程。方法如下:

1.如果一个进程的当前请求的资源会导致死锁,系统拒绝启动该进程;

2.如果一个资源的分配会导致下一步的死锁,系统就拒绝本次的分配;

显然要避免死锁,必须事先知道系统拥有的资源数量及其属性

相关文章

  • 死锁原因及解决、避免办法

    死锁的条件 互斥条件(Mutual exclusion) :资源不能被共享,只能由一个进程使用。 请求与保持条件(...

  • ios NSLock死锁及解决办法

    NSLock死锁及解决办法 代码如下: 输出结果:1 这就照成了死锁 原因如下:由于当前线程运行到第一个lock加...

  • 线程 6. 死锁

    没有办法解决,只能避免 java同步机制解决了线程安全问题,但是同时也引发了死锁现象。死锁现象如何解决呢: 没法解...

  • 死锁及解决办法

    死锁概念及产生原理概念:多个并发进程因争夺系统资源而产生相互等待的现象。原理:当一组进程中的每个进程都在等待某个事...

  • 主线程同步派发一个block任务死锁问题

    死锁的原因: 解决办法: 不要同步派发,采用异步派发dispatch_async(派发完立即返回),则不形成死锁....

  • jstack命令:教你如何排查多线程问题

    这是之前的一个死锁案例: 一个多线程死锁案例,如何避免及解决死锁问题? 如程序中发生这样的死锁问题该如何排查呢?我...

  • 记录一次 mysql 死锁 (患者 为 index merge)

    几点 读懂死锁日志 日志分析 基础知识补习 死锁 原因分析 解决办法 写在最后的 锁 读懂死锁日志 第一步 先登录...

  • 多线程死锁原因及避免

    什么是死锁 首先死锁的产品肯定是发生在两个或者两个以上的线程之间,因为线程请求独占资源时,由于资源被对方占用,自身...

  • iOS 产生死锁的原因及解决办法

    死锁 1、定义: 所谓死锁,通常指有两个线程T1和T2都卡住了,并等待对方完成某些操作。T1不能完成是因为它在等待...

  • 第二章: 基础知识

    2.1.6 User Namespace 出现错误: 原因及解决办法:

网友评论

      本文标题:死锁原因及解决、避免办法

      本文链接:https://www.haomeiwen.com/subject/qfwdeqtx.html