(一)死鎖的定義
如果一組進程中的每一個進程都在等待僅由該組進程中的其他進程才能引發的事件,那么該組進程是死鎖的(Deadlock)。
(二)產生死鎖的必要條件
雖然進程在運行過程中可能會發生死鎖,但產生死鎖是必須具備一定條件的。產生死鎖必須同時具備下面四個必要條件,只要其中任意一個條件不成立,死鎖就不會產生:
(1)互斥條件。進程對所分配到的資源進行排他性使用,即在一段時間內,某資源只能被一個進程占用。如果此時還有其他進程請求該資源,則請求進程只能等待,直至占有該資源的進程用畢釋放。
(2)請求和保持條件。進程已經保持了至少一個資源,但又提出了新的資源請求,而該資源已被其他進程占有,此時請求進程被阻塞,但對自己以獲得的資源保持不放。
(3)不可搶占條件。進程已獲得的資源在未使用完之前不能被搶占,只能在進程使用完時由自己釋放。
(4)循環等待條件。在發生死鎖時,必然存在一個進程—資源的循環鏈,即進程集合{P0,P1,P2,P3,...,Pn}中的P0正在等待P1占用的資源,P1正在等待P2占用的資源,... ... ,Pn正在等待已被P0占用的資源。
(三)處理死鎖的方法
(1)預防死鎖。該方法是通過設置某些限制條件,去破壞產生死鎖的四個必要條件中的一個或幾個來預防產生死鎖。
(2)避免死鎖。在資源的動態分配過程中,用某種方法防止系統進入不安全狀態,從而可以避免產生死鎖。
(3)檢測死鎖。通過檢測機構及時地檢測出死鎖的發生,然后采取適當的措施,把進程從思索中解脫出來。
(4)解除死鎖。當檢測到系統中已發生死鎖時,就采取相應的措施,將進程從死鎖狀態中解脫出來。常用方法是---撤銷一些進程,回收他們的資源,將他們分配給已處於阻塞狀態的進程,使其能繼續運行。