牛客網Java刷題知識點之什么是死鎖、死鎖產生的4個必要條件、死鎖的解除與預防


 

 

  不多說,直接上干貨!

 

 

 

 

https://www.nowcoder.com/ta/review-java/review?query=&asc=true&order=&page=16

 

 

 

 

 

 

什么是死鎖?

  死鎖可以這樣理解,就是互相不讓步不放棄,同時需要對方的資源。造成互相不滿足資源需求,也不放棄自身已有資源。死鎖就這樣了。

  死鎖是指多個進程因競爭資源而造成的一種僵局(互相等待),若無外力作用,這些進程都將無法向前推進。

    死鎖是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去,如果系統資源充足,進程的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則就會因爭奪有限的資源而陷入死鎖。

 
  產生死鎖的原因主要是:
  ( 1 ) 因為系統資源不足。
  ( 2 ) 進程運行推進的順序不合適。
  ( 3 ) 資源分配不當等。
 
 
 
 

   

 

死鎖產生的4個必要條件:
  • 互斥條件:進程要求對所分配的資源(如打印機)進行排他性控制,即在一段時間內某 資源僅為一個進程所占有。此時若有其他進程請求該資源,則請求進程只能等待。
  • 不剝奪條件:進程所獲得的資源在未使用完畢之前,不能被其他進程強行奪走,即只能 由獲得該資源的進程自己來釋放(只能是主動釋放)。
  • 請求和保持條件:進程已經保持了至少一個資源,但又提出了新的資源請求,而該資源 已被其他進程占有,此時請求進程被阻塞,但對自己已獲得的資源保持不放。
  • 循環等待條件:存在一種進程資源的循環等待鏈,鏈中每一個進程已獲得的資源同時被 鏈中下一個進程所請求。 
  這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。
  死鎖的四個條件 :1、互斥     2、保持鎖並請求鎖    3、不可搶奪    4、循環等待

 

 

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

 

 

 

 

 

死鎖的解除與預防
  理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖。所以,在系統設計、進程調度等方面注意如何不讓這四個必要條件成立,如何確定資源的合理分配算法,避免進程永久占據系統資源。此外,也要防止進程在處於等待狀態
的情況下占用資源。因此,對資源的分配要給予合理的規划。

 


預防死鎖,預先破壞產生死鎖的四個條件。互斥不可能破壞,所以有如下三種方法:
        1、破壞請求和保持條件,
         進程必須等所有要請求的資源都空閑時才能申請資源,這種方法會使資源浪費嚴重(有些資源可能僅在運行初期或結束時才使用,甚至根本不使用)。
          允許進程獲取初期所需資源后,便開始運行,運行過程中再逐步釋放自己占有的資源,比如有一個進程的任務是把數據復制到磁盤中再打印,前期只需獲得磁盤資源而不需要獲得打印機資源,待復制完畢后再釋放掉磁盤資源。這種方法比第一種方法好,會使資源利用率上升。
          2、破壞不可搶占條件
               這種方法代價大,實現復雜。
          3、破壞循壞等待條件
          對各進程請求資源的順序做一個規定,避免相互等待。這種方法對資源的利用率比前兩種都高,但是前期要為設備指定序號,新設備加入會有一個問題,其次對用戶編程也有限制。 
 
 
 
  死鎖,基本就是資源不夠,互相需要對方資源卻不肯放棄自身資源。N線程訪問N資源,為了避免死鎖,可以為其加鎖並指定獲取鎖的順序,這樣線程按照順序加鎖訪問資源,依次使用依次釋放,可以避免死鎖。
 
  使用多線程的時候,一種非常簡單的避免死鎖的方式就是:指定獲取鎖的順序,並強制線程按照指定的順序獲取鎖。因此,如果所有的線程都是以同樣的順序加鎖和釋放鎖,就不會出現死鎖了。可以 確保N個線程可以訪問N個資源同時又不導致死鎖了。
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM