deadlock

deadlock

死鎖
所謂死鎖:是指兩個或兩個以上的進程在執行過程中,因争奪資源而造成的一種互相等待的現象,若無外力作用,它們都将無法推進下去。此時稱系統處于死鎖狀态或系統産生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。
    中文名:死鎖 外文名:deadlock 适用領域: 所屬學科: 簡介:指兩個以上的進程在執行過程 原因:因争奪資源而造成互相等待

線程死鎖

A deadlock is when two or more threads are blocked waiting to obtain locks that some of the other threads in the deadlock are holding. Deadlock can occur when multiple threads need the same locks, at the same time, but obtain them in different order.(死鎖是指兩個或多個線程被阻塞,等待獲得死鎖中其他一些線程持有的鎖。當多個線程同時需要相同的鎖,但以不同的順序獲取它們時,就會發生死鎖。)

解決方法

預防

理解了死鎖的原因,尤其是産生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖。所以,在系統設計、進程調度等方面注意如何不讓這四個必要條件成立,如何确定資源的合理分配算法,避免進程永久占據系統資源。此外,也要防止進程在處于等待狀态的情況下占用資源,在系統運行過程中,對進程發出的每一個系統能夠滿足的資源申請進行動态檢查,并根據檢查結果決定是否分配資源,若分配後系統可能發生死鎖,則不予分配,否則予以分配。因此,對資源的分配要給予合理的規劃。

一、有序資源分配法

這種算法資源按某種規則系統中的所有資源統一編号(例如打印機為1、磁帶機為2、磁盤為3、等等),申請時必須以上升的次序。系統要求申請進程:

1、對它所必須使用的而且屬于同一類的所有資源,必須一次申請完;

2、在申請不同類資源時,必須按各類設備的編号依次申請。例如:進程PA,使用資源的順序是R1,R2;進程PB,使用資源的順序是R1,R2;若采用動态分配有可能形成環路條件,造成死鎖。

采用有序資源分配法:R1的編号為1,R2的編号為2;

PA:申請次序應是:R1,R2

PB:申請次序應是:R1,R2

這樣就破壞了環路條件,避免了死鎖的發生

二、銀行算法

避免死鎖算法中最有代表性的算法是Dijkstra E.W于1968年提出的銀行家算法:

該算法需要檢查申請者對資源的最大需求量,如果系統現存的各類資源可以滿足申請者的請求,就滿足申請者的請求。

這樣申請者就可很快完成其計算,然後釋放它占用的資源,從而保證了系統中的所有進程都能完成,所以可避免死鎖的發生。

避免死鎖

最具有代表性的避免死鎖的算法,是Dijkastra的銀行家算法,這是由于該算法能用于銀行系統現金貸款的發放而得名的,為實現銀行家算法,系統中必須設置若幹數據結構.

1)可利用資源向量Available是個含有m個元素的數組,其中的每一個元素代表一類可利用的資源數目。如果Available[j]=K,則表示系統中現有Rj類資源K個。

2)最大需求矩陣Max這是一個n×m的矩陣,它定義了系統中n個進程中的每一個進程對m類資源的最大需求。如果Max[i,j]=K,則表示進程i需要Rj類資源的最大數目為K。

3)分配矩陣Allocation這也是一個n×m的矩陣,它定義了系統中每一類資源當前已分配給每一進程的資源數。如果Allocation[i,j]=K,則表示進程i當前已分得Rj類資源的數目為K。

4)需求矩陣Need。這也是一個n×m的矩陣,用以表示每一個進程尚需的各類資源數。如果Need[i,j]=K,則表示進程i還需要Rj類資源K個,方能完成其任務。Need[i,j]=Max[i,j]-Allocation[i,j]

排除方法

1、撤消陷于死鎖的全部進程;

2、逐個撤消陷于死鎖的進程,直到死鎖不存在;

3、從陷于死鎖的進程中逐個強迫放棄所占用的資源,直至死鎖消失;

4、從另外一些進程那裡強行剝奪足夠數量的資源分配給死鎖進程,以解除死鎖狀态。

上一篇:森林狂想曲

下一篇:釣球

相關詞條

相關搜索

其它詞條