處理死鎖的方法


死鎖檢測、死鎖預防和死鎖避免是處理死鎖的主要方法。有關這些方法的詳細資訊如下所示:

死鎖檢測

資源排程程式在跟蹤分配給不同程序的所有資源時,可以檢測到死鎖。檢測到死鎖後,可以使用以下方法進行處理:

  • 終止所有涉及死鎖的程序。這種方法不太實用,因為程序完成的所有進度都會被破壞。
  • 可以從某些程序中搶佔資源並分配給其他程序,直到解決死鎖情況。

死鎖預防

在死鎖發生之前預防死鎖非常重要。因此,系統會在執行每個事務之前檢查它,以確保它不會導致死鎖。如果即使存在哪怕一點可能性表明某個事務可能導致死鎖,則永遠不允許它執行。

一些使用時間戳來確保不會發生死鎖的死鎖預防方案如下所示:

  • 等待-死亡方案
  • 在等待-死亡方案中,如果事務 T1 請求由事務 T2 持有的資源,則可能發生以下兩種情況之一:

    • TS(T1) < TS(T2) - 如果 T1 比 T2 舊,即 T1 比 T2 更早進入系統,則允許它等待資源,該資源將在 T2 完成執行後釋放。
    • TS(T1) > TS(T2) - 如果 T1 比 T2 新,即 T1 在 T2 之後進入系統,則 T1 將被終止。稍後將使用相同的時間戳重新啟動它。
  • 擊殺-等待方案
  • 在擊殺-等待方案中,如果事務 T1 請求由事務 T2 持有的資源,則可能發生以下兩種情況之一:

    • TS(T1) < TS(T2) - 如果 T1 比 T2 舊,即 T1 比 T2 更早進入系統,則允許它回滾 T2 或擊殺 T2。然後 T1 獲取資源並完成執行。T2 稍後將使用相同的時間戳重新啟動。
    • TS(T1) > TS(T2) - 如果 T1 比 T2 新,即 T1 在 T2 之後進入系統,則允許它等待資源,該資源將在 T2 完成執行後釋放。

死鎖避免

最好避免死鎖,而不是在死鎖發生後採取措施。等待圖可用於死鎖避免。但是,這僅適用於較小的資料庫,因為在較大的資料庫中它可能會變得非常複雜。

等待圖

等待圖顯示了資源和事務之間的關係。如果事務請求資源或已持有資源,則在等待圖上可見為邊。如果等待圖包含迴圈,則系統中可能存在死鎖,否則不存在。

Wait for graph

鴕鳥演算法

鴕鳥演算法意味著簡單地忽略死鎖,並假設它永遠不會發生。之所以這樣做是因為在某些系統中,處理死鎖的成本遠高於簡單地忽略它,因為它很少發生。因此,只需假設死鎖永遠不會發生,如果偶然發生,則重新啟動系統。

更新於: 2020年6月24日

13K+ 瀏覽量

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.