死鎖及死鎖的解決

2021-09-30 15:46:19 字數 1227 閱讀 7505

如果一組程序中的每乙個程序都在等待僅由該組程序中的其它程序才能引發的事件,那麼該組程序是死鎖的,

(1)競爭不可搶占性資源。

當系統把某資源分配給該程序後,就不能將它強行收回,只能在程序用完後自行釋放。

(2)競爭可消耗資源。

當系統中供多個程序共享的資源如印表機,公用佇列等,其數目不足以滿足諸程序的需要時,會引起諸程序對資源的競爭而產生死鎖。

(3)程序推進順序不當。

程序在執行過程中,請求和釋放資源的順序不當,也同樣會導致產生程序死鎖。

必須要注意:乙個執行緒也可引起死鎖。

(1) 互斥條件:

乙個資源每次只能被乙個程序使用。

(2) 請求和保持條件:

乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。

(3) 不可搶占條件:

程序已獲得的資源,在末使用完之前,不能強行剝奪,只能在程序使用完時由自己釋放。

(4) 迴圈等待條件:

若干程序之間形成一種頭尾相接的迴圈等待資源關係。

(1)破壞「互斥」條件:

就是在系統裡取消互斥。若資源不被乙個程序獨佔使用,那麼死鎖是肯定不會發生的。但一般「互斥」條件是無法破壞的。

(2)破壞「請求和保持」條件

方法一:所有程序在執行之前,必須一次性地申請在整個執行過程中所需的全部資源。

優點:簡單、易行且安全。

缺點:a.資源被嚴重浪費,嚴重惡化了資源的利用率。

b.使程序經常會發生飢餓現象。

方法二:要求每個程序提出新的資源申請前,釋放它所占有的資源。

(3)破壞「不可搶占」條件:

允許對資源實行搶奪。

方法一:如果占有某些資源的乙個程序進行進一步資源請求被拒絕,則該程序必須釋放它最初占有的資源,如果有必要,可再次請求這些資源和另外的資源。

方法二:如果乙個程序請求當前被另乙個程序占有的乙個資源,則作業系統可以搶占另乙個程序,要求它釋放資源。只有在任意兩個程序的優先順序都不相同的條件下,該方法才能預防死鎖。

(4)破壞「迴圈等待」條件:

將系統中的所有資源統一編號,程序可在任何時刻提出資源申請,但所有申請必須按照資源的編號順序(公升序)提出。這樣做就能保證系統不出現死鎖。

1) 搶占資源。

從乙個或多個程序中搶占足夠數量的資源,分配給死鎖程序,以解除死鎖狀態。

2) 終止(或撤銷)程序。

終止(或撤銷)系統中的乙個或多個死鎖程序,直至打破迴圈環路,使系統從死鎖狀態解脫出來。

死鎖與解決死鎖

要是以後寫資料庫的產品,不是寫sql語句,那裡面涉及到的鎖就跟多了。故事裡有五個哲學家 這些哲學家很窮,只買得起五根筷子。他們坐成一圈,兩個人的中間放一根筷子。哲學家吃飯的時候必須同時得到左手邊和右手邊的筷子。如果他身邊的任何一位正在使用筷子,那他只有等著。假設哲學家的編號是a b c d e,筷子...

Java死鎖及死鎖的避免

鎖是個非常有用的工具,運用場景非常多,因為它使用起來非常簡單,而且易於理解。但同時它也會帶來一些困擾,那就是可能會引起死鎖,一旦產生死鎖,就會造成系統功能不可用。1.系統資源不足 2.進行執行推進的順序不合適 3.資源分配不當 如果系統資源充足,程序的資源請求都能得到滿足,死鎖出現的可能性就很低,否...

死鎖及解決方法

死鎖的概念 quad 死鎖 指的是 quad 多個執行緒各自占有一些共享資源,並且互相等待其他執行緒占有的資源才能進行,而導致兩個或者多個執行緒都在等待對方釋放資源,都停止執行的情形。quad 因此,某乙個同步塊需要同時擁有 兩個以上物件的鎖 時,就可能會發生 死鎖 的問題。下面案例中,化妝執行緒 ...