【问题标题】:If starvation of processes is occurred, does it mean that there will be a deadlock?如果出现进程饥饿,是否意味着会出现死锁?
【发布时间】:2014-03-24 22:23:25
【问题描述】:

如果出现进程饥饿,是否意味着会出现死锁??? 如果是,任何解释,如果不是?!

【问题讨论】:

    标签: multithreading process operating-system deadlock


    【解决方案1】:

    发生死锁有四个必要和充分条件(称为科夫曼条件):

    1. 互斥
    2. 获取并等待
    3. 无抢占
    4. 循环等待

    您要问的是,基本上:如果只有(尽管是无限期的)等待会发生死锁吗?。答案是不。必须满足所有四个条件才能发生死锁。

    在维基百科上查看更多here

    【讨论】:

      【解决方案2】:

      不,饥饿并不意味着死锁。举例来说,考虑两个共享资源的进程(P,Q),必须以互斥方式处理该资源。

      进程由以下程序控制:

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

      系统可能会继续让P 使用资源进行任意次数的迭代,即进程Q 在任何时间段内都处于饥饿状态:

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

      但即使Q 永远没有机会访问资源,这也不是死锁。

      【讨论】:

        【解决方案3】:

        如果需要相同资源的两个进程以某种方式饿死,就会出现死锁。让我们想象一个简单版本的餐饮哲学家问题:

        一张桌子上有两根独立的筷子。坐在桌旁的是两位哲学家。哲学家只能用两只筷子吃饭。

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

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

        解决此问题的一种方法是让某些进程拥有资源优势,这样就不会出现死锁。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-13
          • 1970-01-01
          相关资源
          最近更新 更多