關於linux中的死鎖

一:什麼事死鎖?

     進程(線程)在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於“死鎖”狀態或系統產生了死鎖,這些永遠在互相等待的進程(線程)稱爲死鎖進程(線程)。由於資源佔用時互斥的,當某個進程提出申請資源後,使得有關進程(線程)在無外力協助下,永遠分配不到必備的資源而無法運行,這就產生了一種特殊現象死鎖。

  舉例兩種情形:1 兩個進程(線程)在互相申請對方佔有的臨界資源時就會因爲申請不到而長時間等待產生死鎖。

            

           2 一個進程(線程)可能產生死鎖,如果一個進程重複的申請自己已經佔有的臨界資源也會因爲申請不到而長時             間等待產生死鎖。

              


二:死鎖產生的四種條件

    (1) 互斥條件:一個資源每次只能被一個進程使用。
           (2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
           (3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
           (4) 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關係。
這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之
一不滿足,就不會發生死鎖。


三:解決死鎖

         (1)死鎖預防。

      預先確定一些資源分配策略,進程按規定申請資源,系統按預定的策略進行分配,這些分配策略均能使產生思索的四個必       要條件中的一個條件不成立,從而使系統不會發生死鎖。

      比如:

          

           (2) 死鎖避免:避免是指進程在每次申請資源時判斷這些操作是否安全,例如,使用銀行家算法。死鎖避免算法的執行會                 增加系統的開銷。

           (3) 死鎖檢測:死鎖預防和避免都是事前措施,而死鎖的檢測則是判斷系統是否處於死鎖狀態,如果是,則執行死鎖解除                策略。

           (4) 死鎖解除:這是與死鎖檢測結合使用的,它使用的方式就是剝奪。即將某進程所擁有的資源強行收回,分配給其他的                 進程。

 



發佈了55 篇原創文章 · 獲贊 47 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章