什麼是執行緒鎖,什麼是死鎖,解決死鎖的辦法。

2021-09-12 23:10:22 字數 971 閱讀 2085

死鎖:指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去

**死鎖的條件:**
死鎖的四個必要條件

在計算機專業的本科教材中,通常都會介紹死鎖的四個必要條件。這四個條件缺一不可,或者說只要破壞了其中任何乙個條件,死鎖就不可能發生。我們來複習一下,這四個條件是:

•互斥(mutual exclusion):存在這樣一種資源,它在某個時刻只能被分配給乙個執行緒(也稱為執行緒)使用;

•持有(hold and wait):當請求的資源已被占用從而導致執行緒阻塞時,資源占用者不但無需釋放該資源,而且還可以繼續請求更多資源;

•不可剝奪(no preemption):執行緒獲得到的互斥資源不可被強行剝奪,換句話說,只有資源占用者自己才能釋放資源;

•環形等待(circular wait):若干執行緒以不同的次序獲取互斥資源,從而形成環形等待的局面,想象在由多個執行緒組成的環形鏈中,每個執行緒都在等待下乙個執行緒釋放它持有死鎖:指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去

怎麼避免死鎖:

解除死鎖的必要條件

不難看出,在死鎖的四個必要條件中,第

二、三和四項條件比較容易消除。通過引入事務機制,往往可以消除第

二、三兩項條件,方法是將所有上鎖操作均作為事務對待,一旦開始上鎖,即確保全部操作均可回退,同時通過鎖管理器檢測死鎖,並剝奪資源(回退事務)。這種做法有時會造成較大開銷,而且也需要對上鎖模式進行較多改動。

消除第四項條件是比較容易且代價較低的辦法。具體來說這種方法約定:上鎖的順序必須一致。具體來說,我們人為地給鎖指定一種類似「水位」的方向性屬性。無論已持有任何鎖,該執行緒所有的上鎖操作,必須按照一致的先後順序從低到高(或從高到低)進行,且在乙個系統中,只允許使用一種先後次序。的資源。

什麼是死鎖?如何解決死鎖?

死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。產生死鎖的原因,主要包括 如果系統資源充足,程序的資源請求都能夠得到滿足,那麼死鎖出現的可能...

什麼是多執行緒,鎖,死鎖,怎麼避免死鎖

面試官問執行緒的問題,以前從來沒有總結過怎麼回答,一下子就說不出來了。回來細細總結一下,下次不能再不知道從 說起了 細思之,首先應該 了解什麼是執行緒 執行緒是資源分配的基本單位,程式執行流的最小單位。執行緒可以共用記憶體資源,多執行緒能解決cpu空閒的問題。多執行緒能夠實現併發的執行任務,提高處理...

什麼是執行緒死鎖 如何避免死鎖

執行緒死鎖描述的是這樣一種情況 多個執行緒同時被阻塞,它們中的乙個或者全部都在等待某個資源被釋放。由於執行緒被無限期地阻塞,因此程式不可能正常終止。如下圖所示,執行緒 a 持有資源 2,執行緒 b 持有資源 1,他們同時都想申請對方的資源,所以這兩個執行緒就會互相等待而進入死鎖狀態。1.產生死鎖的四...