更新時間:2021年05月07日18時48分 來源:傳智教育 瀏覽次數(shù):
互斥:一個資源每次只能被一個進(jìn)程使用(資源獨(dú)立)。
請求與保持:一個進(jìn)程因請求資源而阻塞時,對已獲得的資源保持不放(不釋放鎖)。
不剝奪:進(jìn)程已獲得的資源,在未使用之前,不能強(qiáng)行剝奪(搶奪資源)。
循環(huán)等待:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待的資源關(guān)閉(死循環(huán))。
1. 破壞”互斥”條件:系統(tǒng)里取消互斥、若資源一般不被一個進(jìn)程獨(dú)占使用,那么死鎖是肯定不會發(fā)生的,但一般“互斥”條件是無法破壞的,因此,在死鎖預(yù)防里主要是破壞其他三個必要條件,而不去涉及破壞“互斥”條件。
2. 破壞“請求和保持”條件:
方法1:所有的進(jìn)程在開始運(yùn)行之前,必須一次性的申請其在整個運(yùn)行過程各種所需要的全部資源。
優(yōu)點(diǎn):簡單易實(shí)施且安全。
缺點(diǎn):因?yàn)槟稠?xiàng)資源不滿足,進(jìn)程無法啟動,而其他已經(jīng)滿足了的資源也不會得到利用,嚴(yán)重降低了資源的利用率,造成資源浪費(fèi)。
方法2:該方法是對第一種方法的改進(jìn),允許進(jìn)程只獲得運(yùn)行初期需要的資源,便開始運(yùn)行,在運(yùn)行過程中逐步釋放掉分配到,已經(jīng)使用完畢的資源,然后再去請求新的資源。這樣的話資源的利用率會得到提高,也會減少進(jìn)程的饑餓問題。
3. 破壞“不剝奪”條件:當(dāng)一個已經(jīng)持有了一些資源的進(jìn)程在提出新的資源請求沒有得到滿足時,它必須釋放已經(jīng)保持的所有資源,待以后需要使用的時候再重新申請。這就意味著進(jìn)程已占有的資源會被短暫的釋放或者說被搶占了。
4. 破壞“循環(huán)等待”條件:可以通過定義資源類型的線性順序來預(yù)防,可以將每個資源編號,當(dāng)一個進(jìn)程占有編號為i 的資源時,那么它下一次申請資源只能申請編號大于i 的資源。
猜你喜歡:
使用static關(guān)鍵字如何定義成員變量?
2021-04-29Java中this關(guān)鍵字的常見用法有哪些?
2021-04-29什么是Mybatis?Mybaits有哪些優(yōu)點(diǎn)?
2021-04-28數(shù)據(jù)庫優(yōu)化策略有哪些?【Java常見面試題】
2021-04-28Java實(shí)戰(zhàn)教程 SaaS移動辦公完整版《iHRM 人力資源管理系統(tǒng)》
2021-04-20Docker有幾種默認(rèn)網(wǎng)絡(luò)?執(zhí)行默認(rèn)網(wǎng)絡(luò)管理過程演示
2021-04-16