什麼是死鎖,產生的原因,防止死鎖的辦法

什麼是死鎖?

操作系統中有若干進程併發執行,它們不斷申請、使用、釋放系統資源,雖然系統的進程協調、通信機構會對它們進行控制,但也可能出現若干進程都相互等待對方釋放資源才能繼續運行,否則就阻塞的情況。此時,若不借助外界因素,誰也不能釋放資源,都會原地等待永遠不會發生的條件,系統處於停滯狀態,這就是死鎖。

產生的原因

  1. 因爲系統資源不足。
  2. 進程運行推進的順序不合適。
  3. 資源分配不當等。

產生死鎖的必要條件

  1. 互斥條件:一個資源每次只能被一個進程使用。
  2. 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
  3. 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
  4. 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關係。

防止死鎖的辦法

  1. 多個線程需要相同的鎖時,保持加鎖順序一致。
  2. 設置加鎖時限,若一個線程沒有在給定的時限內成功獲得所有需要的鎖,則會進行回退並釋放所有已經獲得的鎖,然後等待一段隨機的時間再重試。
  3. 死鎖檢測,當線程 A 請求鎖失敗之後,會在記錄各個線程佔用了哪些鎖的小冊子中查找該鎖的佔有者(線程 B ),再遍歷線程 B 所佔用的鎖中是否包括線程 A 所佔用的鎖,從而可以判斷出當前這種狀態是否是死鎖。

已判斷死鎖之後該怎麼辦?

  1. 已發生死鎖的線程釋放所有鎖並回退,等待一段隨機時間之後再重新開始。
  2. 按照線程優先級,僅對幾個線程進行釋放鎖和回退操作。若線程都是平級的,則在發生死鎖的情況下,隨機對這些線程賦予不同的優先級。

 

(SAW:Game Over!)

發佈了265 篇原創文章 · 獲贊 105 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章