美文网首页
发生死锁的条件

发生死锁的条件

作者: CaptainJno | 来源:发表于2017-10-30 19:25 被阅读0次

下文以哲学家进餐问题为背景

当以下四个条件同时满足时,就会发生死锁:

1)互斥条件。任务使用的资源中至少有一个是不能共享的。这里,一根Chopstick一次就只能被一个Philosopher使用。

2)至少有一个任务它必须持有一个资源且正在等待获取一个当前被别的任务持有的资源。也就是说,要发生死锁,Philosopher必须拿着一根Chopstick并且等待另一根

3)资源不能被任务抢占,任务必须把资源释放当做普通事件。Philosopher很有礼貌,他们不会从其他Philosopher那里抢Chopstick。

4)必须有循环等待,这时,一个任务等待其他任务所持有的资源,后者又在等待另一个任务所持有的资源,这样一直下去,直到有一个任务在等待第一个任务所持有的资源,使得大家都被锁住。在DeadlockingDiningPhilosophers.java中,因为每个Philosopher都试图先得到右边的Chopstick,然后得到左边的Chopstick,所以发生了循环等待。

要发生死锁的话,以上条件必须全部满足。反之,要防止死锁,只需破坏其中一个即可。

哲学家进餐问题最容易防止死锁的方法就是破坏第4个条件。有这个条件的原因是每个Philosopher都试图用特定的顺序拿Chopstick:先右后左。正因为如此,就可能会发生“每个人都拿着右边的Chopstick,并等待左边的Chopstick”的情况,这就是循环等待条件。然而,如果最后一个Philosopher被初始化成先拿左边的Chopstick,后拿右边的Chopstick,那么这个Philosopher将永远不会阻止其右边的Philosopher拿起他的Chopstick。在本例中,这就可以防止循环等待。当然,这只会问题的解决方法之一。

相关文章

  • 发生死锁的条件

    下文以哲学家进餐问题为背景 当以下四个条件同时满足时,就会发生死锁: 1)互斥条件。任务使用的资源中至少有一个是不...

  • 资源死锁发生的条件

    1)互斥条件。每个资源要么已经分配给了一个进程,要么就是可用的。 2)占有和等待条件。已经得到了某个资源的进程可以...

  • mysql 死锁排查

    一、show ENGINE INNODB status查看死锁位置,分析。 二、首先解决死锁可以从死锁发生的条件入...

  • 解决死锁

    要避免死锁就需要分析死锁发生的条件,有个叫 Coffman 的牛人早就 总结过了,只有以下这四个条件都发生时才会出...

  • 7-8.死锁与分页

    七、死锁 概念 死锁的特征(四个条件同时出现,死锁将会发生(必要条件))互斥:一次只有一个进程可以使用一个资源占有...

  • 死锁

    死锁 死锁概念 死锁起因 死锁预防策略 死锁的定义 两个或多个进程无限期地等待永远不会发生的条件的一种系统状态。结...

  • 慕课网高并发实战(十)- 死锁

    死锁发生的必要条件 package com.mmall.concurrency.example.deadLock;...

  • 死锁发生的必要条件

    1)互斥条件。每个资源要么已经分配给了一个进程,要么就是可用的。 2)占有和等待条件。已经得到了某个资源的进程可以...

  • java 基础

    什么情况下会发生死锁 出现死锁,有这四个必要条件:互斥条件、请求和保持、不可剥夺、循环等待 互斥条件:一个资源每次...

  • 死锁

    死锁四个条件: 死锁例子: 解读上述代码: 1.synchronized 就是满足死锁条件----互斥条件----...

网友评论

      本文标题:发生死锁的条件

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