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
从未获得访问资源的机会,这也不是死锁