2010-12-20 30 views

回答

0

死鎖發生的頻率與使用同步程序編寫多線程程序時一樣多,而且您不知道自己在做什麼。

例如,在將線程置於等待狀態之前,只要需要相同的互斥體來喚醒該線程,就必須釋放互斥鎖,這只是一個小例子。

+0

可以給一個實際的例子應用程序發生死鎖嗎? – pappa 2011-01-11 12:21:04

+0

只要有2個代碼在2個線程中運行的應用程序使用相同的互斥體和另一個機制,也許是一個信號量(保持簡單)。等待信號量而不釋放互斥量,就會發生死鎖。 – 2011-01-13 22:42:34

0

我在問同樣的問題。我在我的教科書中發現了這個問題:

費用是一個重要的考慮因素。忽略死鎖的可能性是 比其他方法便宜。由於在很多系統中,很少發生死鎖(比如說,每年一次),其他方法的額外花費似乎不值得。

它還提到,如果它發生,系統可能會慢一點,最終需要重新啓動。我們都熟悉的東西。 教科書引用來自Brian,W.'s Operating System Basics的第323頁。

但是正如Joao所說,開發人員需要生成高質量的代碼。所以我想在理論上,如果你運行了很多垃圾程序,你可能會經常面對死鎖。

0

用戶程序的多線程進程中的死鎖將使用戶應用程序失去功能,這與操作系統中的死鎖無關。如果內核以不正確的方式分配資源並且這種情況發生的非常少,操作系統中會發生死鎖。頻率是幾年一次,因此Windows和Unix等流行操作系統採用鴕鳥方法來忽略死鎖。