2014-03-24 40 views

回答

-1

如果需要相同資源的兩個進程以某種方式餓死,將會出現死鎖。讓我們來想象一下簡單版的餐飲哲學問題:

在桌子上有兩個獨立的筷子。坐在桌旁的是兩位哲學家。一位哲學家可能只能用兩把筷子吃他的晚餐。

當每個哲學家抓住一根筷子時,就會發生飢餓。當每個哲學家耐心等待對方給他們一根筷子時,就會發生僵局。

當一位哲學家抓住筷子,吃掉並將筷子傳遞給另一位哲學家時,飢餓就不會發生。

解決此問題的一種方法是爲某些進程提供資源優勢,以便不會發生死鎖。

繼續這個例子,這就好像年輕的哲學家如果想要一根筷子,總是必須服從較老的哲學家。

0

有四個充分必要條件發生死鎖(稱爲科夫曼條件):

  1. 互斥
  2. 採集,等待
  3. 沒有搶佔
  4. 循環等待

你問的是:會發生死鎖,如果只有(儘管不確定)等待。答案是不。必須滿足所有四個條件才能發生死鎖。

查看更多here維基百科。

0

不,飢餓並不意味着僵局。爲了說明,請考慮兩個共享資源的進程(P,Q),必須通過互斥來處理資源。

的過程由下面的程序來控制:

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

可能的是,該系統前進通過讓P使用該資源用於任何數目的迭代,即,過程Q餓死爲任何時間段:

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

但即使Q從來沒有機會訪問資源,它也不是死鎖。