執行緒死鎖概念和產生原因

2021-08-21 13:38:47 字數 2102 閱讀 8689

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

(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 互斥條件 乙個資源每次只能被乙個程序使用。2 請求與保持條件 乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。3 不可剝奪條件 程序已獲得的資源,在末使用完之前,不能強行剝奪。4 迴圈等待條件 若干程序之間形成一種頭尾相接的迴圈等待資源關係。1 等待某個資源時,使用...

死鎖的概念以及產生死鎖的原因

在多道程式系統中,由於多個程序的併發執行,改善了系統資源的利用率並提高了系統 的處理能力。然而,多個程序的併發執行也帶來了新的問題 死鎖。所謂死鎖是指多個進 程因競爭資源而造成的一種僵局 互相等待 若無外力作用,這些程序都將無法向前推進。下面我們通過一些例項來說明死鎖現象。先看生活中的乙個例項,在一...

死鎖產生的原因

一 什麼是死鎖?如果乙個程序集合裡面的每個程序都在等待這個集合中的其他乙個程序 包括自身 才能繼續往下執行,若無外力他們將無法推進,這種情況就是死鎖,處於死鎖狀態的程序稱為死鎖程序 二 死鎖產生的原因?1.因競爭資源發生死鎖 現象 系統中供多個程序共享的資源的數目不足以滿足全部程序的需要時,就會引起...