所謂死鎖:是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過程中午笛,因爭奪資源而造成的一種互相等待的現(xiàn)象惭蟋,若無外力作用,它們都將無法推進(jìn)下去药磺。此時(shí)稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖告组,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程。由于資源占用是互斥的癌佩,當(dāng)某個(gè)進(jìn)程提出申請資源后木缝,使得有關(guān)進(jìn)程在無外力協(xié)助下,永遠(yuǎn)分配不到必需的資源而無法繼續(xù)運(yùn)行围辙,這就產(chǎn)生了一種特殊現(xiàn)象死鎖我碟。
雖然進(jìn)程在運(yùn)行過程中,可能發(fā)生死鎖酌畜,但死鎖的發(fā)生也必須具備一定的條件怎囚,死鎖的發(fā)生必須具備以下四個(gè)必要條件。
1)互斥條件:指進(jìn)程對所分配到的資源進(jìn)行排它性使用桥胞,即在一段時(shí)間內(nèi)某資源只由一個(gè)進(jìn)程占用恳守。如果此時(shí)還有其它進(jìn)程請求資源,則請求者只能等待贩虾,直至占有資源的進(jìn)程用畢釋放催烘。
2)請求和保持條件:指進(jìn)程已經(jīng)保持至少一個(gè)資源,但又提出了新的資源請求缎罢,而該資源已被其它進(jìn)程占有伊群,此時(shí)請求進(jìn)程阻塞,但又對自己已獲得的其它資源保持不放策精。
3)不剝奪條件:指進(jìn)程已獲得的資源舰始,在未使用完之前,不能被剝奪咽袜,只能在使用完時(shí)由自己釋放丸卷。
4)環(huán)路等待條件:指在發(fā)生死鎖時(shí),必然存在一個(gè)進(jìn)程——資源的環(huán)形鏈询刹,即進(jìn)程集合{P0谜嫉,P1,P2凹联,···沐兰,Pn}中的P0正在等待一個(gè)P1占用的資源;P1正在等待P2占用的資源蔽挠,……住闯,Pn正在等待已被P0占用的資源。
在系統(tǒng)中已經(jīng)出現(xiàn)死鎖后,應(yīng)該及時(shí)檢測到死鎖的發(fā)生寞秃,并采取適當(dāng)?shù)拇胧﹣斫獬梨i定庵。目前處理死鎖的方法可歸結(jié)為以下四種:
- 預(yù)防死鎖饭尝。
這是一種較簡單和直觀的事先預(yù)防的方法昼汗。方法是通過設(shè)置某些限制條件尸诽,去破壞產(chǎn)生死鎖的四個(gè)必要條件中的一個(gè)或者幾個(gè),來預(yù)防發(fā)生死鎖绑改。預(yù)防死鎖是一種較易實(shí)現(xiàn)的方法谢床,已被廣泛使用。但是由于所施加的限制條件往往太嚴(yán)格厘线,可能會導(dǎo)致系統(tǒng)資源利用率和系統(tǒng)吞吐量降低识腿。
- 避免死鎖。
該方法同樣是屬于事先預(yù)防的策略造壮,但它并不須事先采取各種限制措施去破壞產(chǎn)生死鎖的的四個(gè)必要條件渡讼,而是在資源的動態(tài)分配過程中,用某種方法去防止系統(tǒng)進(jìn)入不安全狀態(tài)耳璧,從而避免發(fā)生死鎖成箫。
3)檢測死鎖。
這種方法并不須事先采取任何限制性措施旨枯,也不必檢查系統(tǒng)是否已經(jīng)進(jìn)入不安全區(qū)蹬昌,此方法允許系統(tǒng)在運(yùn)行過程中發(fā)生死鎖。但可通過系統(tǒng)所設(shè)置的檢測機(jī)構(gòu)攀隔,及時(shí)地檢測出死鎖的發(fā)生皂贩,并精確地確定與死鎖有關(guān)的進(jìn)程和資源,然后采取適當(dāng)措施昆汹,從系統(tǒng)中將已發(fā)生的死鎖清除掉明刷。
4)解除死鎖。
這是與檢測死鎖相配套的一種措施满粗。當(dāng)檢測到系統(tǒng)中已發(fā)生死鎖時(shí)遮精,須將進(jìn)程從死鎖狀態(tài)中解脫出來。常用的實(shí)施方法是撤銷或掛起一些進(jìn)程败潦,以便回收一些資源,再將這些資源分配給已處于阻塞狀態(tài)的進(jìn)程准脂,使之轉(zhuǎn)為就緒狀態(tài)劫扒,以繼續(xù)運(yùn)行。死鎖的檢測和解除措施狸膏,有可能使系統(tǒng)獲得較好的資源利用率和吞吐量沟饥,但在實(shí)現(xiàn)上難度也最大。