如果發生進程飢餓,是否意味着會出現死鎖? 如果是的話,任何解釋,如果沒有?!如果發生進程飢餓,是否意味着會出現死鎖?
0
A
回答
-1
如果需要相同資源的兩個進程以某種方式餓死,將會出現死鎖。讓我們來想象一下簡單版的餐飲哲學問題:
在桌子上有兩個獨立的筷子。坐在桌旁的是兩位哲學家。一位哲學家可能只能用兩把筷子吃他的晚餐。
當每個哲學家抓住一根筷子時,就會發生飢餓。當每個哲學家耐心等待對方給他們一根筷子時,就會發生僵局。
當一位哲學家抓住筷子,吃掉並將筷子傳遞給另一位哲學家時,飢餓就不會發生。
解決此問題的一種方法是爲某些進程提供資源優勢,以便不會發生死鎖。
繼續這個例子,這就好像年輕的哲學家如果想要一根筷子,總是必須服從較老的哲學家。
0
有四個充分必要條件發生死鎖(稱爲科夫曼條件):
- 互斥
- 採集,等待
- 沒有搶佔
- 循環等待
你問的是:會發生死鎖,如果只有(儘管不確定)等待?。答案是不。必須滿足所有四個條件才能發生死鎖。
查看更多here維基百科。
0
不,飢餓並不意味着僵局。爲了說明,請考慮兩個共享資源的進程(P
,Q
),必須通過互斥來處理資源。
的過程由下面的程序來控制:
while (true) {
take();
use();
release();
}
可能的是,該系統前進通過讓P
使用該資源用於任何數目的迭代,即,過程Q
餓死爲任何時間段:
P.take()
P.use()
P.release()
P.take()
P.use()
P.release()
...
但即使Q
從來沒有機會訪問資源,它也不是死鎖。
相關問題
- 1. 是「線程飢餓死鎖」在這裏發生的
- 2. 死鎖自由與免於飢餓
- 3. 什麼是飢餓?
- 4. Rails線程飢餓
- 5. 飢餓和線程
- 6. 如果我們證明沒有飢餓,我們不需要證明沒有死鎖或活鎖(進展)?
- 7. Java線程產生/飢餓問題
- 8. 飢餓與upgrade_lock
- 9. '!'是否意味着perl?
- 10. 我想實現一個資源處理程序類。它必須是無死鎖和無飢餓
- 11. DB連接飢餓
- 12. RwLock何時會發生死鎖而不是死鎖?
- 13. 如何判斷這個系統是否會發生死鎖?
- 14. 如何模擬C#線程飢餓
- 15. 當進程意外死亡時,會否解鎖羣集文件?
- 16. 是否HTTP狀態碼500意味着其他錯誤代碼不會發生
- 17. Java中的「無飢餓」實現
- 18. CakePHP的:ID飢餓驅使我堅果
- 19. 子進程中`shell = True`中的`shell`是否意味着`bash`?
- 20. 如果A == B,這是否意味着[A isEqual:B]是真的?
- 21. 數組索引超出範圍異常,是否意味着發生?
- 22. PRISM是否意味着大規模的應用程序開發?
- 23. $是什麼?是否意味着在Ruby?
- 24. 是什麼;是否意味着在Ruby?
- 25. 發現意味着使用數組
- 26. tcp套接字飢餓程序是否會干擾文件系統I/O
- 27. 如果沒有回滾,ROLLBACK TRANSACTION是否意味着提交
- 28. 意味着功能產生
- 29. 飢餓的Bukkit事件?
- 30. Winforms飢餓控制失效