如果一組進(jìn)程中每一個(gè)進(jìn)程都在等待僅由該組進(jìn)程中的其他進(jìn)程才能引發(fā)的事件咆繁,那么該組進(jìn)程是死鎖的婴谱。
舉例來(lái)說(shuō):有兩個(gè)進(jìn)程A和B,A持有資源a等待b資源,B持有資源b等待a資源代虾,兩個(gè)進(jìn)程都在等待另一個(gè)資源的同時(shí)不釋放資源歉摧,就形成死鎖艇肴。
形成死鎖的四個(gè)必要條件:
(1) 互斥條件:一個(gè)資源每次只能被一個(gè)進(jìn)程使用。
(2) 請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí)叁温,對(duì)已獲得的資源保持不放再悼。
(3) 不剝奪條件:進(jìn)程已獲得的資源,在末使用完之前膝但,不能強(qiáng)行剝奪冲九。
(4) 循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。
處理死鎖的思路如下:
預(yù)防死鎖:破壞四個(gè)必要條件中的一個(gè)或多個(gè)來(lái)預(yù)防死鎖
避免死鎖:在資源動(dòng)態(tài)分配的過(guò)程中跟束,用某種方式防止系統(tǒng)進(jìn)入不安全的狀態(tài)莺奸。
檢測(cè)死鎖:運(yùn)行時(shí)產(chǎn)生死鎖,及時(shí)發(fā)現(xiàn)思索冀宴,將程序解脫出來(lái)灭贷。
解除死鎖:發(fā)生死鎖后,撤銷(xiāo)進(jìn)程略贮,回收資源甚疟,分配給正在阻塞狀態(tài)的進(jìn)程。
預(yù)防死鎖的辦法:
破壞請(qǐng)求和保持條件:1.一次性的申請(qǐng)所有資源逃延。之后不在申請(qǐng)資源览妖,如果不滿(mǎn)足資源條件則得不到資源分配。2.只獲得初期資源運(yùn)行揽祥,之后將運(yùn)行完的資源釋放讽膏,請(qǐng)求新的資源。
破壞不可搶占條件:當(dāng)一個(gè)進(jìn)程獲得某種不可搶占資源拄丰,提出新的資源申請(qǐng)府树,若不能滿(mǎn)足是嗜,則釋放所有資源,以后需要挺尾,再次重新申請(qǐng)。
破壞循環(huán)等待條件:對(duì)資源進(jìn)行排號(hào)站绪,按照序號(hào)遞增的順序請(qǐng)求資源遭铺。若進(jìn)程獲得序號(hào)高的資源想要獲取序號(hào)低的資源,就需要先釋放序號(hào)高的資源恢准。
死鎖的解除辦法:
1魂挂、搶占資源。從一個(gè)或多個(gè)進(jìn)程中搶占足夠數(shù)量的資源馁筐,分配給死鎖進(jìn)程涂召,以解除死鎖狀態(tài)。
2敏沉、終止(撤銷(xiāo))進(jìn)程:將一個(gè)或多個(gè)思索進(jìn)程終止(撤銷(xiāo))果正,直至打破循環(huán)環(huán)路,使系統(tǒng)從死鎖狀態(tài)解脫盟迟。
作者:樂(lè)百事52淑熙
鏈接:http://www.reibang.com/p/342d60d67bbc
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有秋泳。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處攒菠。