死鎖
deadlock
定義:一種進(jìn)程執(zhí)行過(guò)程中的循環(huán)等待現(xiàn)象。一組進(jìn)程中的每個(gè)進(jìn)程占用部分資源同時(shí)又等待其他進(jìn)程占用的資源,造成所有進(jìn)程不會(huì)結(jié)束循環(huán)等待,無(wú)法繼續(xù)執(zhí)行。
學(xué)科:計(jì)算機(jī)科學(xué)技術(shù)_系統(tǒng)軟件_操作系統(tǒng)
相關(guān)名詞:進(jìn)程 死鎖預(yù)防 死鎖避免 死鎖檢測(cè)
圖片來(lái)源:視覺(jué)中國(guó)
【延伸閱讀】
死鎖是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過(guò)程中,由于競(jìng)爭(zhēng)資源或彼此通信而造成的一種阻塞現(xiàn)象。若無(wú)外力介入,它們都將無(wú)法推進(jìn)下去。死鎖是并發(fā)編程中非常重要的一個(gè)問(wèn)題,死鎖使程序運(yùn)行無(wú)法得到正確的結(jié)果并同時(shí)降低操作系統(tǒng)的資源利用率,危害非常大。
一個(gè)經(jīng)典的死鎖問(wèn)題可以是這樣的:在一個(gè)計(jì)算機(jī)系統(tǒng)中,僅有一臺(tái)打印機(jī)A和一個(gè)輸入設(shè)備B時(shí),進(jìn)程P1正在占用輸入設(shè)備B,并且要求使用打印機(jī)A,但是打印機(jī)A此時(shí)被進(jìn)程P2占據(jù),P2又要求利用P1所占據(jù)的輸入設(shè)備B。兩個(gè)進(jìn)程都在不停地等待,不能繼續(xù)進(jìn)行,這時(shí)兩個(gè)進(jìn)程就會(huì)陷入死鎖狀態(tài)。
另一個(gè)著名的死鎖問(wèn)題稱為“哲學(xué)家進(jìn)餐問(wèn)題”,該問(wèn)題描述了這樣一種場(chǎng)景:有五位哲學(xué)家共用一張圓桌,分別坐在周圍的五張椅子上,在圓桌上有五只碗和五根筷子,他們的生活方式是交替地進(jìn)行思考和進(jìn)餐。該問(wèn)題有如下約束:哲學(xué)家必須拿到兩根筷子才能進(jìn)餐,只有進(jìn)餐結(jié)束之后才會(huì)放下已有的筷子,如果拿不到筷子就等別人放下筷子。一種典型的死鎖情況就是哲學(xué)家們每人都拿到了一根筷子,這樣他們就一直等待別人放下筷子但是又不放下自己的筷子,這樣就陷入僵持狀態(tài),誰(shuí)也無(wú)法進(jìn)餐。
如果系統(tǒng)資源充足,進(jìn)程的資源請(qǐng)求都能夠得到滿足,死鎖出現(xiàn)的可能性就很低,否則就會(huì)因爭(zhēng)奪有限的資源而陷入死鎖。另外,如果資源充足但是分配不當(dāng)或者進(jìn)程運(yùn)行推進(jìn)順序與速度不同,也可能產(chǎn)生死鎖。產(chǎn)生死鎖必須同時(shí)具備下面四個(gè)必要條件,只要其中一個(gè)條件不成立,死鎖就不會(huì)發(fā)生。
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)系。
為了處理死鎖,一般會(huì)采用如下四種基本方法。
1.死鎖預(yù)防:通過(guò)設(shè)置一些限制條件,去破壞產(chǎn)生死鎖的四個(gè)必要條件之一即可。
2.死鎖避免:在資源分配過(guò)程中,使用某種方法避免系統(tǒng)進(jìn)入不安全的狀態(tài),從而避免發(fā)生死鎖。
3.死鎖檢測(cè):允許死鎖的發(fā)生,但是通過(guò)系統(tǒng)的檢測(cè)之后,采取一些措施,將死鎖清除掉。
4.解除死鎖:撤銷一些進(jìn)程,回收它們的資源,該方法與死鎖檢測(cè)配合使用。
(延伸閱讀作者:大連理工大學(xué)計(jì)算機(jī)學(xué)院教授 楊鑫)
責(zé)任編輯:張鵬輝