跳至內容

死鎖

維基百科,自由的百科全書

這是本頁的一個歷史版本,由118.165.173.206對話2010年2月2日 (二) 09:37 外部連結編輯。這可能和目前版本存在着巨大的差異。

死鎖,這裏指的是進程死鎖,是一個計算機技術的名詞。它是作業系統的一種狀態,當一個或多個進程等待系統資源,而系統資源又同時被此進程本身或者其它進程佔用,就形成了死鎖。它有一個變種是活鎖

簡介

例如,一個進程 p1佔用了顯示器,同時又必須使用打印機,而打印機被進程p2佔用,p2又必須使用顯示器,這樣就形成了死鎖。現實生活中也有死鎖的例子,在一個十字路口,四面的汽車都在等待(靠右行),每次都是右邊的汽車先行。

死鎖的預防

如果系統中只有一個進程,當然不會產生死鎖。如果每個進程僅需求一種系統資源,也不會產生死鎖。不過這只是理想狀態,在現實中是可遇不可求的。

禁止搶佔:no preemption

持有和等待:hold and wait

互斥:mutual exclusion

循環等待:bounded waiting

死鎖的避免

我們也可以嘗試迴避死鎖。因為在理論上,死鎖總是可能產生的,所以作業系統嘗試監視所有進程,使其沒有死鎖。

死鎖的消除

最簡單的消除死鎖的辦法是重啟系統。更好的辦法是終止一個進程的運行。

同樣也可以把一個或多個進程回滾到先前的某個狀態。如果一個進程被多次回滾,遲遲不能佔用必需的系統資源,可能會導致進程飢餓

參見

外部連結