如果发生了进程的饥饿,那是否意味着会出现死锁?

时间:2014-03-24 22:23:26

标签: multithreading process operating-system deadlock

如果发生了进程的饥饿,是否意味着会出现死锁? 是的,如果没有,是否有任何解释?!

3 个答案:

答案 0 :(得分:0)

发生死锁有四个必要且充足的条件(称为Coffman条件):

  1. 互相排斥
  2. 获取并等待
  3. 没有先发制人
  4. 循环等待
  5. 你要问的是,基本上:如果只有(虽然不确定)等待,会发生僵局吗?。答案是不。必须满足所有四个条件才能发生死锁。

    在维基百科上查看更多here

答案 1 :(得分:0)

不,饥饿并不意味着僵局。为了说明,请考虑共享资源的两个进程(PQ),必须以互斥方式处理这些进程。

流程由以下程序控制:

while ( true) {
  take();
  use();
  release();
}

系统有可能让P使用资源进行任意数量的迭代,即在任何时间段内处理Q饥饿:

P.take() P.use() P.release() P.take() P.use() P.release() ...

但即使Q永远无法访问资源,也不会出现死锁。

答案 2 :(得分:-1)

如果需要相同资源的两个进程以某种方式饿死,则会出现死锁。让我们想象一下Dining Wangphhers问题的一个简单版本:

桌子上有两根单独的筷子。坐在桌旁的是两位哲学家。哲学家可能只能用两根筷子吃晚饭。

当每个哲学家抓住一根筷子时,就会发生饥饿。当每个哲学家耐心地等待对方给他们一根筷子时,就会发生僵局。

当一位哲学家抓住筷子,吃筷子并将筷子传递给另一位哲学家时,就不会发生饥饿。

解决这个问题的一种方法是为某些进程提供资源优势,这样就不会出现死锁。

继续这个例子,就好像年轻的哲学家如果想要一根筷子那么总是不得不顺从那位年长的哲学家。