死鎖產(chǎn)生的四個必要條件?如何避免和預(yù)防死鎖產(chǎn)生?

一、什么是死鎖?

兩個線程或兩個以上線程都在等待對方執(zhí)行完畢才能繼續(xù)往下執(zhí)行的時候就發(fā)生了死鎖。結(jié)果就是這些線程都陷入了無限的等待中,這就是死鎖。

舉個例子:如果線程1鎖住了A,然后嘗試對B進行加鎖,同時線程2已經(jīng)鎖住了B,接著嘗試對A進行加鎖,這時死鎖就發(fā)生了。線程1永遠(yuǎn)得不到B,線程2也永遠(yuǎn)得不到A,并且它們永遠(yuǎn)也不會知道發(fā)生了這樣的事情。為了得到彼此的對象(A和B),它們將永遠(yuǎn)阻塞下去。這種情況就是一個死鎖。

二、產(chǎn)生死鎖的四個必要條件

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

● 請求與保持條件:進程已經(jīng)保持了至少一個資源,但又提出了新的資源請求,而該資源 已被其他進程占有,此時請求進程被阻塞,但對自己已獲得的資源保持不放。

● 不可剝奪條件:進程所獲得的資源在未使用完畢之前,不能被其他進程強行奪走,即只能 由獲得該資源的進程自己來釋放(只能是主動釋放)。

● 循環(huán)等待條件:指在發(fā)生死鎖時,必然存在一個進程——資源的環(huán)形鏈,即進程集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1占用的資源;P1正在等待P2占用的資源,……,Pn正在等待已被P0占用的資源。

這四個條件是死鎖的必要條件,只要系統(tǒng)發(fā)生死鎖,這些條件必然成立(即必要不充分條件),而只要上述條件之一不滿足,就不會發(fā)生死鎖。

三、死鎖產(chǎn)生的原因:

1.系統(tǒng)資源的競爭

當(dāng)系統(tǒng)中供多個進程共享的資源如打印機、公用隊列的等,其數(shù)目不足以滿足諸進程的需要時,會引起諸進程對資源的競爭而產(chǎn)生死鎖。

2.進程運行推進順序不當(dāng)引起死鎖

● 進程推進順序合法   當(dāng)進程P1和P2并發(fā)執(zhí)行時,如果按照下述順序推進:P1:Request(R1);

P1:Request(R2); P1: Relese(R1);P1: Relese(R2); P2:Request(R2);

P2:Request(R1); P2: Relese(R2);P2:

Relese(R1);這兩個進程便可順利完成,這種不會引起進程死鎖的推進順序是合法的。

● 進程推進順序非法

  若P1保持了資源R1,P2保持了資源R2,系統(tǒng)處于不安全狀態(tài),因為這兩個進程再向前推進,便可能發(fā)生死鎖。例如,當(dāng)P1運行到P1:Request(R2)時,將因R2已被P2占用而阻塞;當(dāng)P2運行到P2:Request(R1)時,也將因R1已被P1占用而阻塞,于是發(fā)生進程死鎖。

四、如何避免和預(yù)防死鎖產(chǎn)生

死鎖避免的基本思想:系統(tǒng)對進程發(fā)出每一個系統(tǒng)能夠滿足的資源申請進行動態(tài)檢查,并根據(jù)檢查結(jié)果決定是否分配資源,如果分配后系統(tǒng)可能發(fā)生死鎖,則不予分配,否則予以分配。這是一種保證系統(tǒng)不進入死鎖狀態(tài)的動態(tài)策略。

理解了死鎖的原因,尤其是產(chǎn)生死鎖的四個必要條件,就可以最大可能地避免、預(yù)防和解除死鎖。只要打破四個必要條件之一就能有效預(yù)防死鎖的發(fā)生:

● 打破互斥條件:改造獨占性資源為虛擬資源,大部分資源已無法改造。

● 打破不可搶占條件:當(dāng)一進程占有一獨占性資源后又申請一獨占性資源而無法滿足,則退出原占有的資源。

● 打破占有且申請條件:采用資源預(yù)先分配策略,即進程運行前申請全部資源,滿足則運行,不然就等待,這樣就不會占有且申請。

● 打破循環(huán)等待條件:實現(xiàn)資源有序分配策略,對所有設(shè)備實現(xiàn)分類編號,所有進程只能采用按序號遞增的形式申請資源。


五、死鎖避免和死鎖預(yù)防的區(qū)別:

死鎖預(yù)防是設(shè)法至少破壞產(chǎn)生死鎖的四個必要條件之一,嚴(yán)格的防止死鎖的出現(xiàn);而死鎖避免則不那么嚴(yán)格的限制產(chǎn)生死鎖的必要條件的存在,因為即使死鎖的必要條件存在,也不一定發(fā)生死鎖。死鎖避免是在系統(tǒng)運行過程中注意避免死鎖的最終發(fā)生。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容