多线程 死锁问题

死锁条件

死锁发生的充分必要条件,当且仅当以下4个条件均满足时才会发生死锁

  1. 互斥条件。任务使用的资源中至少有一个是不能共享的
  2. 至少有一个任务他必须持有一个资源且正在等待其他任务所持有的资源。
  3. 资源不能被任务抢占,任务必须把释放资源当成普通事件。
  4. 必须有循环等待。这时,一个任务等待其他任务所持有的资源,后者又在等待另一个任务所持有的资源,这样一直下去,直到有一个任务在等待第一个任务所持有的资源,导致大家都被锁住。

备注:任务即线程的意思,以上参考THINKING IN JAVA

示例说明

举个例子说明一下,有5个哲学家在圆桌用餐,他们只有5根筷子,每人左手边和右手边都有一根筷子。当然吃饭他们需要同时拥有这两根筷子。

这里一根筷子只能被一个哲学家使用,指的就是互斥条件。

程序中很可能存在这样的情况,一个哲学家他手里拿着一根筷子,但是他在等第二根筷子。指的就是第二个条件。

这里的哲学家不会去抢别人的筷子。即第三种情况。

这是一个圆桌,如果你的程序写的是每个哲学家都先拿起左边的筷子,再拿右边的筷子,就可能发生死锁。指的就是循环等待。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值