死結的四個必要條件以及處理死結的策略

來源:互聯網
上載者:User

什麼是死結?如果一個進程集合裡面的每個進程都在等待只能由這個集合中的其他一個進程(包括他自身)才能引發的事件,這種情況就是死結。

這個定義可能有點拗口,一個最簡單的例子就是有資源A和資源B,都是不可剝奪資源,現在進程C已經申請了資源A,進程D也申請了資源B,進程C接下來的操作需要用到資源B,而進程D恰好也在申請資源A,那麼就引發了死結。這個肯定每個人都看過了。然後套用回去定義:如果一個進程集合裡面(進程C和進程D)的每個進程(進程C和進程D)都在等待只能由這個集合中的其他一個進程(對於進程C,他在等進程D;對於進程D,他在等進程C)才能引發的事件(釋放相應資源)。

這裡的資源套件括了軟的資源(代碼塊)和硬的資源(例如掃描器)。資源一般可以分兩種:可剝奪資源(Preemptable)和不可剝奪資源(Nonpreemptable)。一般來說對於由可剝奪資源引起的死結可以由系統的重新分配資源來解決,所以一般來說大家說的死結都是由於不可剝奪資源所引起的。

死結的四個必要條件

互斥條件(Mutual exclusion):資源不能被共用,只能由一個進程使用。
請求與保持條件(Hold and wait):已經得到資源的進程可以再次申請新的資源。
非剝奪條件(No pre-emption):已經分配的資源不能從相應的進程中被強制地剝奪。
迴圈等待條件(Circular wait):系統中若干進程組成環路,該環路中每個進程都在等待相鄰進程正佔用的資源。

處理死結的策略

1.忽略該問題。例如鴕鳥演算法,該演算法可以應用在極少發生死結的的情況下。為什麼叫鴕鳥演算法呢,因為傳說中鴕鳥看到危險就把頭埋在地底下,可能鴕鳥覺得看不到危險也就沒危險了吧。跟掩耳盜鈴有點像。
2.檢測死結並且恢複。
3.仔細地對資源進行動態分配,以避免死結。
4.通過破除死結四個必要條件之一,來防止死結產生。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.