什么叫死鎖
死鎖是指多個(gè)進(jìn)程在運(yùn)行過(guò)程中,因?yàn)闋?zhēng)奪資源而造成的一種僵局剂癌,如果沒(méi)有外力推進(jìn)锌雀,處于僵局中的進(jìn)程就無(wú)法繼續(xù)執(zhí)行蚂夕。
死鎖產(chǎn)生原因
1.競(jìng)爭(zhēng)資源:請(qǐng)求同一有限資源的進(jìn)程數(shù)多于可用資源數(shù)
2.進(jìn)程推進(jìn)順序非法:進(jìn)程執(zhí)行中,請(qǐng)求和釋放資源順序不合理腋逆,如資源等待鏈 (互相等待)
死鎖產(chǎn)生的四個(gè)必要條件
1.互斥條件:進(jìn)程對(duì)所分配的資源進(jìn)行排他性的使用
2.請(qǐng)求和保持條件:進(jìn)程被阻塞的時(shí)候并不釋放鎖申請(qǐng)到的資源
3.不可剝奪條件:進(jìn)程對(duì)于已經(jīng)申請(qǐng)到的資源在使用完成之前不可以被剝奪
4.環(huán)路等待條件:發(fā)生死鎖的時(shí)候存在的一個(gè) 進(jìn)程-資源 環(huán)形等待鏈
死鎖處理:
1.預(yù)防死鎖:破壞產(chǎn)生死鎖的4個(gè)必要條件中的一個(gè)或者多個(gè)婿牍;實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,但是如果限制過(guò)于嚴(yán)格會(huì)降低系統(tǒng)資源利用率以及吞吐量
2.避免死鎖:在資源的動(dòng)態(tài)分配中惩歉,防止系統(tǒng)進(jìn)入不安全狀態(tài)(可能產(chǎn)生死鎖的狀態(tài))-如銀行家算法
檢測(cè)死鎖:允許系統(tǒng)運(yùn)行過(guò)程中產(chǎn)生死鎖等脂,在死鎖發(fā)生之后,采用一定的算法進(jìn)行檢測(cè)撑蚌,并確定與死鎖相關(guān)的資源和進(jìn)程上遥,采取相關(guān)方法清除檢測(cè)到的死鎖。實(shí)現(xiàn)難度大
3.解除死鎖:與死鎖檢測(cè)配合争涌,將系統(tǒng)從死鎖中解脫出來(lái)(撤銷進(jìn)程或者剝奪資源)粉楚。對(duì)檢測(cè)到的和死鎖相關(guān)的進(jìn)程以及資源,通過(guò)撤銷或者掛起的方式亮垫,釋放一些資源并將其分配給處于阻塞狀態(tài)的進(jìn)程模软,使其轉(zhuǎn)變?yōu)榫途w態(tài)。實(shí)現(xiàn)難度大