教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

死鎖是怎么產(chǎn)生的?如何避免產(chǎn)生死鎖?

更新時(shí)間:2021年05月07日18時(shí)48分 來(lái)源:傳智教育 瀏覽次數(shù):

死鎖產(chǎn)生的四個(gè)必要條件:

互斥:一個(gè)資源每次只能被一個(gè)進(jìn)程使用(資源獨(dú)立)。

請(qǐng)求與保持:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放(不釋放鎖)。

不剝奪:進(jìn)程已獲得的資源,在未使用之前,不能強(qiáng)行剝奪(搶奪資源)。

循環(huán)等待:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待的資源關(guān)閉(死循環(huán))。

死鎖


如何避免死鎖?

1. 破壞”互斥”條件:系統(tǒng)里取消互斥、若資源一般不被一個(gè)進(jìn)程獨(dú)占使用,那么死鎖是肯定不會(huì)發(fā)生的,但一般“互斥”條件是無(wú)法破壞的,因此,在死鎖預(yù)防里主要是破壞其他三個(gè)必要條件,而不去涉及破壞“互斥”條件。

2. 破壞“請(qǐng)求和保持”條件:

方法1:所有的進(jìn)程在開(kāi)始運(yùn)行之前,必須一次性的申請(qǐng)其在整個(gè)運(yùn)行過(guò)程各種所需要的全部資源。

優(yōu)點(diǎn):簡(jiǎn)單易實(shí)施且安全。

缺點(diǎn):因?yàn)槟稠?xiàng)資源不滿足,進(jìn)程無(wú)法啟動(dòng),而其他已經(jīng)滿足了的資源也不會(huì)得到利用,嚴(yán)重降低了資源的利用率,造成資源浪費(fèi)。

方法2:該方法是對(duì)第一種方法的改進(jìn),允許進(jìn)程只獲得運(yùn)行初期需要的資源,便開(kāi)始運(yùn)行,在運(yùn)行過(guò)程中逐步釋放掉分配到,已經(jīng)使用完畢的資源,然后再去請(qǐng)求新的資源。這樣的話資源的利用率會(huì)得到提高,也會(huì)減少進(jìn)程的饑餓問(wèn)題。

3. 破壞“不剝奪”條件:當(dāng)一個(gè)已經(jīng)持有了一些資源的進(jìn)程在提出新的資源請(qǐng)求沒(méi)有得到滿足時(shí),它必須釋放已經(jīng)保持的所有資源,待以后需要使用的時(shí)候再重新申請(qǐng)。這就意味著進(jìn)程已占有的資源會(huì)被短暫的釋放或者說(shuō)被搶占了。

4. 破壞“循環(huán)等待”條件:可以通過(guò)定義資源類型的線性順序來(lái)預(yù)防,可以將每個(gè)資源編號(hào),當(dāng)一個(gè)進(jìn)程占有編號(hào)為i 的資源時(shí),那么它下一次申請(qǐng)資源只能申請(qǐng)編號(hào)大于i 的資源。



猜你喜歡:

樂(lè)觀鎖有什么缺點(diǎn)?樂(lè)觀鎖的缺點(diǎn)介紹

什么是鎖消除和鎖粗化?鎖消除和鎖粗化介紹

互斥鎖是什么,有什么作用?

Java面試之樂(lè)觀鎖和悲觀鎖的區(qū)別

黑馬程序員Java開(kāi)發(fā)培訓(xùn)課程

0 分享到:
和我們?cè)诰€交談!