多线程 死锁问题

死锁条件

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

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

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

示例说明

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

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

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

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

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

 

猜你喜欢

转载自blog.csdn.net/JOKER_SAMA/article/details/81669159