如果一組進(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ā)生死鎖后,撤銷進(jìn)程,回收資源,分配給正在阻塞狀態(tài)的進(jìn)程。
預(yù)防死鎖的辦法:
破壞請(qǐng)求和保持條件:1.一次性的申請(qǐng)所有資源。之后不在申請(qǐng)資源,如果不滿足資源條件則得不到資源分配。2.只獲得初期資源運(yùn)行,之后將運(yùn)行完的資源釋放,請(qǐng)求新的資源。
破壞不可搶占條件:當(dāng)一個(gè)進(jìn)程獲得某種不可搶占資源,提出新的資源申請(qǐng),若不能滿足,則釋放所有資源,以后需要,再次重新申請(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、終止(撤銷)進(jìn)程:將一個(gè)或多個(gè)思索進(jìn)程終止(撤銷),直至打破循環(huán)環(huán)路,使系統(tǒng)從死鎖狀態(tài)解脫。
個(gè)人公號(hào):【排骨肉段】,可以關(guān)注一下。