執行緒死鎖的原因和必要條件

2021-08-03 01:45:10 字數 2102 閱讀 4331

所謂死鎖,是指多個程序在執行過程中因爭奪資源而照成的一種僵局。當程序處於這種僵持狀態時,若無外力作用,它們都將無法再向前推進。

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

(2)程序間推進順序非法。程序在執行過程中,請求和釋放資源的順序不當,也同樣會產生程序死鎖。

以下詳細分析產生死鎖的原因

1.競爭資源引起程序死鎖

1)可剝奪和非剝奪性資源

可把系統中的資源分為兩類,一類是可剝奪性資源,是指程序在獲得這類資源後,該資源可以再被其它程序或系統剝奪。例如,優先權高的程序可以剝奪優先權低的程序的處理機。又如,記憶體區可由儲存器管理程式把乙個程序從乙個儲存區移到另乙個儲存區,此即剝奪了該程序原來占有的儲存區。甚至可以將乙個程序從記憶體調到外存上。可見cpu和主存均屬於可剝奪性資源。另一類資源是不可剝奪性資源,當系統把這類資源分配給某程序後,再不能強行**,只能在程序用完後自行釋放,如磁帶機、印表機等。

2)競爭非剝奪性資源

在系統中所配置的非剝奪性資源,由於它們的數量不能滿足諸程序執行的需要,會使程序在執行過程中,因爭奪這些資源而陷入僵局。例如,例如系統中只有一台印表機r1和一台磁帶機r2,可供程序p1和p2共享。假定p1已占用了印表機r1,p2已占用了磁帶機r2。此時,若p2繼續要求印表機,p2將阻塞;p1若又要求磁帶機,p1也將阻塞。於是,在p1和p2之間便形成了僵局,兩個程序都在等待對方釋放自己所需的資源。但它們都因不能繼續獲得自己所需的資源而不能繼續推進,從而也不能釋放自己已占有的資源,以致進入死鎖狀態。為方便說明,用方塊代表資源,圓圈代表程序給出如下狀態圖:

當箭頭從程序指向資源時,表示程序請求資源;當箭頭從資源指向程序時,表示該資源已被分配給該程序。從中可以看出,這時在p1、p2及r1和r2之間已經形成了乙個環路,說明已進入死鎖狀態。

3)競爭臨時資源

上述的印表機資源屬於可順序重複使用型資源,稱為永久性資源。還有一種是所謂的臨時資源,這是指由乙個程序產生,被另一程序使用一短暫時間後便無用的資源,故也稱為消耗性資源,它也可能引起死鎖。下圖展示了在程序間通訊時形成死鎖的情況。

圖中s1、s2和s3是臨時性資源。程序p1產生訊息s1,又要求從p3接收訊息s3;程序p3產生訊息s3,又要求從p2接收訊息s2;程序p2產生訊息s2,又要求從p2接收訊息s1.

說明:

若按下列順序進行無死鎖產生:

p1:…release(s1);request(s3);…

p2:…release(s2);request(s1);…

p3:…release(s3);request(s2);…

但若按下列順序進行可能產生死鎖:

p1:… request(s3); release(s1); …

p2:… request(s1) ; release(s2);…

p3:… request(s2) ; release(s3);…

2.程序推進順序不當引起死鎖

由於程序在執行中具有非同步性特徵,這就可能使上述p1和p2兩個程序按下述兩種順序向前推進。

1)程序推進順序合法

我們稱不會引起程序死鎖的推進順序是合法的。

2)程序推進順序不合法

我們稱會引起程序死鎖的推進順序是不合法的。

(1)互斥條件:指程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時還有其它程序請求該資源,則請求者只能等待,直至占有該資源的程序用畢釋放。

(2)請求和保持條件:指程序已經保持了至少乙個資源,但又提出了新的資源請求,而該資源又被其它程序占有,此時請求程序阻塞,但又對自己獲得的其它資源保持不放。

(3)不剝奪條件:指程序已獲得資源,在使用完之前,不能被剝奪,只能在使用完時由自己釋放。

(4)環路等待條件:指在發生死鎖時,必然存在乙個程序—資源的環形鏈,即程序集合(p0,p1,p2,…,pn)中的p0正在等待乙個p1占用的資源;p1正在等待乙個p2占用的資源,……,pn正在等待已被p0占用的資源。

執行緒死鎖和死鎖的必要條件

如果乙個程序集合裡面的每個程序都在等待這個集合中的其他乙個程序 包括自身 才能繼續往下執行,若無外力他們將無法推進,這種情況就是死鎖,處於死鎖狀態的程序稱為死鎖程序 產生死鎖的四個必要條件?1 互斥條件 程序對所分配到的資源不允許其他程序進行訪問,若其他程序訪問該資源,只能等待,直至占有該資源的程序...

死鎖產生的原因和必要條件

死鎖產生的原因和必要條件1 產生死鎖的原因主要是 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資源分配不當等。2.產生死鎖的四個必要條件 1 互斥條件 乙個資源每次只能被乙個程序使用。2 請求與保持條件 乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。3 不剝奪條件 程序已獲得的資源...

死鎖產生的原因及必要條件

產生死鎖的原因主要是 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資源分配不當等。如果系統資源充足,程序的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則 就會因爭奪有限的資源而陷入死鎖。其次,程序執行推進順序與速度不同,也可能產生死鎖。產生死鎖的四個必要條件 1 互斥條件 乙個資源...