“死鎖”形成的條件及分析,讀完之後,大部分程序員收藏了


“死鎖”形成的條件及分析,讀完之後,大部分程序員收藏了

1.“死鎖”的含義

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

2.“死鎖”產生的原因以及四個必要條件的合理解釋

產生死鎖的原因可歸結為如下兩點:

(1)競爭資源。當系統中供多個進程共享的資源如打印機、公用隊列等,其數目不足以滿足進程的需要時,會引起諸進程的競爭而產生死鎖。

(2)進程間推進順序非法。進程在運行過程中,請求和釋放資源的順序不當,也同樣會導致產生進程死鎖。

3.產生死鎖的四個必要條件:

1.互斥(Mutual exclusion):存在這樣一種資源,它在某個時刻只能被分配給一個執行緒(也稱為線程)使用;

2.持有(Hold and wait):當請求的資源已被佔用從而導致執行緒阻塞時,資源佔用者不但無需釋放該資源,而且還可以繼續請求更多資源;

3.不可剝奪(No preemption):執行緒獲得到的互斥資源不可被強行剝奪,換句話說,只有資源佔用者自己才能釋放資源;

4.環形等待(Circular wait):若干執行緒以不同的次序獲取互斥資源,從而形成環形等待的局面,想象在由多個執行緒組成的環形鏈中,每個執行緒都在等待下一個執行緒釋放它持有的資源。

4.“死鎖”的預防和解除

理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖,消除產生死鎖的四個必要條件中的任何一個都可以預防和解除死鎖。

不難看出,在死鎖的四個必要條件中,第二、三和四項條件比較容易消除。

1、靜態分配:採用資源靜態分配策略(進程資源靜態分配方式是指一個進程在建立時就分配了它需要的全部資源),破壞"部分分配"條件;

2、可剝奪:允許進程剝奪使用其他進程佔有的資源,從而破壞"不可剝奪"條件;

3、有序分配:採用資源有序分配法,破壞"環路"條件。

關注

感謝閱讀,如果這篇文章幫助了您,歡迎 點贊收藏,關注轉發 喲。您的幫助是我們前行的動力,我們會提供更多有價值的內容給大家... 謝謝!


分享到:


相關文章: