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