Linux進程之死鎖

所謂死鎖: 是指兩個或兩個以上的進程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱爲死鎖進程。


死鎖產生的原因:

(1) 因爲系統資源不足。  

(2) 進程運行推進的順序不合適。  

(3) 資源分配不當等。

 如果系統資源充足,進程的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則  就會因爭奪有限的資源而陷入死鎖。

其次,進程運行推進順序與速度不同,也可能產生死鎖。

死鎖示意圖:

                                             

產生死鎖的四個必要條件

(1) 互斥條件:一個資源每次只能被一個進程使用。

(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。

(3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。

(4) 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關係。

這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之 一不滿足,就不會發生死鎖。


所以在程序設計中要避免以上四個條件的產生,如此便可預防進程死鎖的發生。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章