死鎖預防 死鎖預防破壞循環等待

本篇文章給大家談談死鎖預防,以及死鎖預防破壞循環等待對應的知識點,希望對各位有所幫助,不要忘了收藏本站喔 。
避免死鎖的方法有哪些?1、避免給一個鎖嵌套上鎖,在持有一個鎖的時候,不要再給這個鎖上鎖 。如果使用多個鎖,使用std::lock 。
2、在持有鎖時,不要調用別人提供的函數,因為你不清楚別人的代碼怎么實現的,不知道它是不是在使用鎖 。
3、給多個鎖上鎖時,固定順序 。如果在給多個所上鎖,并且無法使用std::lock,較好的做法就是在每一個線程中,都按照同樣的順序 。
4、分層次來使用鎖,把程序分成幾個層次 。區分每個層次中使用的鎖,當一個線程已經持有更低層次的鎖時,不允許使用高層次的鎖 。可以在程序運行時給不同的鎖加上層次號,記錄每個線程持有的鎖 。
擴展資料:
解決方法
在系統中已經出現死鎖后,應該及時檢測到死鎖的發生,并采取適當的措施來解除死鎖 。
死鎖預防 。
這是一種較簡單和直觀的事先預防的方法 。方法是通過設置某些限制條件,去破壞產生死鎖的四個必要條件中的一個或者幾個,來預防發生死鎖 。預防死鎖是一種較易實現的方法,已被廣泛使用 。但是由于所施加的限制條件往往太嚴格,可能會導致系統資源利用率和系統吞吐量降低 。
死鎖避免 。
系統對進程發出的每一個系統能夠滿足的資源申請進行動態檢查,并根據檢查結果決定是否分配資源;如果分配后系統可能發生死鎖,則不予分配,否則予以分配 。這是一種保證系統不進入死鎖狀態的動態策略 。
死鎖檢測和解除 。
先檢測:這種方法并不須事先采取任何限制性措施,也不必檢查系統是否已經進入不安全區,此方法允許系統在運行過程中發生死鎖 。但可通過系統所設置的檢測機構,及時地檢測出死鎖的發生,并精確地確定與死鎖有關的進程和資源 。檢測方法包括定時檢測、效率低時檢測、進程等待時檢測等 。
然后解除死鎖:采取適當措施,從系統中將已發生的死鎖清除掉 。
這是與檢測死鎖相配套的一種措施 。當檢測到系統中已發生死鎖時,須將進程從死鎖狀態中解脫出來 。常用的實施方法是撤銷或掛起一些進程,以便回收一些資源,再將這些資源分配給已處于阻塞狀態的進程,使之轉為就緒狀態,以繼續運行 。死鎖的檢測和解除措施,有可能使系統獲得較好的資源利用率和吞吐量,但在實現上難度也較大 。
參考資料:死鎖百度百科

死鎖預防 死鎖預防破壞循環等待

文章插圖
試述死鎖產生的原因和解決辦法產生原因
1、競爭資源引起進程死鎖
當系統中供多個進程共享的資源如打印機、公用隊列的等,其數目不足以滿足諸進程的需要時,會引起諸進程對資源的競爭而產生死鎖 。
2、可剝奪資源和不可剝奪資源
系統中的資源可以分為兩類,一類是可剝奪資源,是指某進程在獲得這類資源后,該資源可以再被其他進程或系統剝奪 。
3、競爭不可剝奪資源
在系統中所配置的不可剝奪資源,由于它們的數量不能滿足諸進程運行的需要,會使進程在運行過程中,因爭奪這些資源而陷于僵局 。
解決方法
1、死鎖預防 。
這是一種較簡單和直觀的事先預防的方法 。方法是通過設置某些限制條件,去破壞產生死鎖的四個必要條件中的一個或者幾個,來預防發生死鎖 。預防死鎖是一種較易實現的方法,已被廣泛使用 。但是由于所施加的限制條件往往太嚴格,可能會導致系統資源利用率和系統吞吐量降低 。