Multithreading 如果出现进程不足,是否意味着将出现死锁?

Multithreading 如果出现进程不足,是否意味着将出现死锁?,multithreading,process,operating-system,deadlock,Multithreading,Process,Operating System,Deadlock,如果出现进程饥饿,是否意味着将出现死锁??? 有什么解释吗?如果有,如果没有 如果两个需要相同资源的进程以某种方式耗尽资源,就会出现死锁。让我们想象一个简单的就餐哲学问题: 桌子上有两根筷子。坐在桌子旁的是两位哲学家。哲学家只能用两个筷子吃饭 当每个哲学家都抓一根筷子时,就会发生饥饿。当每个哲学家耐心地等待对方给他们一根筷子时,僵局就会发生 当一位哲学家抓起两根筷子,吃东西,然后把筷子递给另一位哲学家时,饥饿就不会发生 解决这一问题的一种方法是赋予某些进程以资源优势,这样就不会出现死锁 继续这个

如果出现进程饥饿,是否意味着将出现死锁???
有什么解释吗?如果有,如果没有

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

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

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

当一位哲学家抓起两根筷子,吃东西,然后把筷子递给另一位哲学家时,饥饿就不会发生

解决这一问题的一种方法是赋予某些进程以资源优势,这样就不会出现死锁


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

出现僵局有四个必要和充分的条件(称为科夫曼条件):

  • 互斥
  • 获取并等待
  • 不先发制人
  • 循环等待
  • 本质上,您要问的是:如果只等待(尽管不确定),是否会发生死锁?。答案是:不。要发生死锁,必须满足所有四个条件


    查看维基百科的更多信息。

    不,饥饿并不意味着死锁。为了说明,请考虑两个进程(<代码> P<代码/代码>,<代码> Q>代码>),它们共享一个必须相互排斥的资源。p> 这些过程由以下程序控制:

    while ( true) {
      take();
      use();
      release();
    }
    
    系统可能通过允许
    p
    使用资源进行任意次数的迭代,即过程
    Q
    在任意时间段内饥饿:

    p.take()
    p.use()
    p.release()
    p.take()
    p.use()
    p.release()

    但即使
    Q
    从未获得访问资源的机会,这也不是死锁