Liveness 與同步化工具的評估 (Liveness and Evaluation)
本系列文章內容參考自經典教材 Operating System Concepts, 10th Edition (Silberschatz, Galvin, Gagne)。本文對應章節:Section 6.8 Liveness、Section 6.9 Evaluation。
前幾節介紹的各種同步化工具,如果正確實作,能有效保證互斥性(Mutual Exclusion)。然而,「不會同時進入臨界區」只是並發正確性的一個面向。另一個同樣重要的問題是:這些行程究竟能不能持續往前推進? 本節探討當同步化工具使用不當時,行程可能陷入永遠無法推進的困境,以及如何在各種情境下選擇最合適的工具。
6.8 Liveness(活性)
什麼是 Liveness
使用同步化工具協調臨界區存取,有一個潛在風險:一個行程在嘗試進入臨界區時,可能會無限期等待(Wait Indefinitely)。回顧第 6.2 節,一個有效的臨界區解決方案必須同時滿足三個條件:互斥性(Mutual Exclusion)、推進性(Progress)、有限等待(Bounded Waiting)。無限期等待同時違反了後兩個條件。
Liveness(活性),指的是一個系統必須具備的一組性質,確保行程在其執行生命週期中能夠持續取得進展。一個行程若在前述情況下無限期等待,就是「Liveness Failure(活性失敗)」的典型案例。
Liveness Failure 有許多不同的形式,但通常都表現為系統效能低落、回應遲緩。一個簡單的例子是無窮迴圈(Infinite Loop)。Busy Wait 迴圈本身就存在活性失敗的可能,尤其是當一個行程可能迴圈任意長時間時。使用 Mutex Lock 和 Semaphore 等工具提供互斥性,往往正是引入這類 Liveness 問題的根源。本節探討兩種最常見的活性失敗情境。