什麼是死鎖?怎樣避免死鎖的產生?

一.什麼是死鎖?

死鎖是指兩個或兩個以上的進程在執行過程中,因爭奪資源或不正確的進程間推進順序,而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去,此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱爲死鎖進程。

二.死鎖產生的四個必要條件

雖然進程在運行過程中,可能發生死鎖,但死鎖的發生也必須具備一定的條件,死鎖的發生必須具備以下四個必要條件。

1)互斥條件:指進程對所分配到的資源進行排它性使用,即在一段時間內,這一資源只由這一個進程佔用。如果此時還有其它進程請求該資源,則請求者只能等待,直至佔有該資源的進程用畢釋放。

2)請求和保持條件:指進程已經保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程佔有,此時請求該資源,那麼進程被阻塞,但進程又對自己當前已獲得的其它資源保持不放。

3)不可剝奪條件:指進程已獲得的資源,在未使用完之前,不能被其他進程所剝奪,只能在使用完時,由自己釋放。

4)環路等待條件:指在發生死鎖時,必然存在一個環形鏈,即進程集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1佔用的資源;P1正在等待P2佔用的資源,……,Pn正在等待已被P0佔用的資源。

三.處理死鎖的方法

在系統中已經出現死鎖後,應該及時檢測到死鎖的發生,並採取適當的措施來解除死鎖。目前處理死鎖的方法可歸結爲以下四種:

1) 預防死鎖。

這是一種較簡單和直觀的事先預防法。方法是通過設置某些限制條件,去破壞產生死鎖的四個必要條件中的一個或者幾個,來預防死鎖發生。

2) 避免死鎖。

該方法同樣是屬於事先預防的策略,但它並不是去破壞產生死鎖的的四個必要條件,而是在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。

3)檢測死鎖。

允許死鎖的發生,但是通過系統的檢測之後,採取一些措施,將死鎖清除掉。
  
4)解除死鎖。

該方法與檢測死鎖配合使用。當檢測到系統中已發生死鎖時,需要將進程從死鎖狀態中解脫出來。常用的實施方法是撤銷或掛起一些進程,以便回收一些資源,再將這些資源分配給已處於阻塞狀態的進程,使之轉爲就緒狀態,以便繼續運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章