面試雜談 死鎖的四大條件與處理策略

2021-09-26 19:38:54 字數 1095 閱讀 7020

死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。

比如:兩個執行緒a、b各自持有乙個無法共享的資源,並且他們都需要獲取對方現在持有的資源才能進行下一步,但是他們又必須等對方釋放了才能去獲取,於是a等待b,b也在等待a。如此這般,死鎖就產生了。

死鎖的發生必須具備以下四個必要條件

資源不能被共享,只能由乙個程序使用。
已經得到資源的程序可以再次申請新的資源。
已經分配的資源不能從相應的程序中被強制地剝奪。
系統中若干程序組成環路,該環路中每個程序都在等待相鄰程序正占用的資源。
了解四個必要條件後再來看看開始的例子:

兩個執行緒各自持有乙個無法共享(互斥條件)的資源,並且他們都需要獲取(請求與保持條件)對方現在持有的資源才能進行下一步,但是他們又必須等對方釋放了才能去獲取(不可剝奪條件),於是a等待b,b也在等待a(環路等待條件)。如此這般,死鎖就產生了。

通過破壞四個必要條件中的乙個或多個,使死鎖永遠無法滿足。實現簡單,但是由於所施加的限制條件往往太嚴格,可能會導致系統資源利用率和系統吞吐量降低。

一次性申請所有需要的資源,只要有一種資源不滿足要求,哪怕其它需要的資源都足夠,也不做任何分配。這樣一來就沒有「保持」資源的狀態,只有「請求」資源的狀態,破壞了請求與保持條件。

在申請不同類資源時,必須按指定順序申請,破壞了環路等待條件。

也是預發死鎖,但不會事先去破壞死鎖的必要條件,只是有人請求資源時,用某種方法防止系統進入不安全的狀態(死鎖),從而避免發生死鎖。

基本思想是分配資源之前,判斷系統是否是安全的;若是,才分配。

不採取措施防止死鎖產生,允許系統產生死鎖,但是可以通過一些手段檢測出死鎖,然後將死鎖解除。

檢測方法:

定時檢測

效率低時檢測

程序等待時檢測

解除死鎖方法:

根據具體業務場景,可以撤銷或掛起死鎖的程序/執行緒,使資源釋放。

死鎖的四個必要條件及處理死鎖

如果乙個程序集合裡面的每個程序都在等待只能由這個集合中的其他乙個程序 包括他自身 才能引發的事件,這種情況就是死鎖。這個定義可能有點拗口,下面用乙個簡單例子說明。資源a b 程序c d 描述如下 資源a和資源b,都是不可剝奪資源,現在程序c已經申請了資源a,程序d也申請了資源b,程序c接下來的操作需...

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

死鎖是指兩個或兩個以上的程序 執行緒 在執行過程中因爭奪資源而造成的一種僵局,若無外力作用,這些程序 執行緒 都將無法向前推進。飢餓 starvation 指乙個程序一直得不到資源。死鎖和飢餓都是由於程序競爭資源而引起的。飢餓一般不占有資源,死鎖程序一定占有資源。互斥 至少有乙個資源必須處於非共享模...

做外貿SOHO需要具備的四大條件

想做乙個外貿soho人並不是那麼容易的,作為一名外貿soho你就要做好朝不保夕的準備。你除了要擁有良好的心理素質,還需要有做外貿soho的客戶 貨物各方面的資源。我認為外貿soho需要具備以下四大最基本的條件。一 良好的心理素質。外貿soho就是一次冒險的旅程,有可能你會光芒萬丈,也有可能你會一敗塗...