進程死鎖的四個必要條件以及處理策略

什麼是死鎖?算法

若是一個進程集合裏面的每一個進程都在等待只能由這個集合中的其餘一個進程(包括他自身)才能引起的事件,這種狀況就是死鎖。進程

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

這裏的資源包括了軟的資源(代碼塊)和硬的資源(例如掃描儀)。資源通常能夠分兩種:可剝奪資源(Preemptable)和不可剝奪資源(Nonpreemptable)。通常來講對於由可剝奪資源引發的死鎖能夠由系統的從新分配資源來解決,因此通常來講你們說的死鎖都是因爲不可剝奪資源所引發的。資源

死鎖的四個必要條件it

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

處理死鎖的策略table

1.忽略該問題。例如鴕鳥算法,該算法能夠應用在極少發生死鎖的的狀況下。爲何叫鴕鳥算法呢,由於傳說中鴕鳥看到危險就把頭埋在地底下,可能鴕鳥以爲看不到危險也就沒危險了吧。跟掩耳盜鈴有點像。
2.檢測死鎖而且恢復。
3.仔細地對資源進行動態分配,以免死鎖。
4.經過破除死鎖四個必要條件之一,來防止死鎖產生。循環

相關文章
相關標籤/搜索