第二章 2.5 管程
阿新 • • 發佈:2018-12-09
訊號量機制的不足:
訊號量的控制分佈在多個程序中:
- 正確性分析困難
- 分散的P、V 操作:易出錯,使用不當可能會出現死鎖
- 修改、維護困難:易讀性差,任一修改都可能影響全域性;測試期間發現錯誤困難,即使發現錯誤也不容易定位出錯位置
管程的組成
- 一組區域性變數
- 對區域性變數操作的一組過程
- 對區域性變數進行初始化的語句
管程的特點
- 任何程序只能通過呼叫管程提供的過程入口才能進入管程訪問共享資料
- 就如同使用臨界資源,就要先通過其訊號量的申請 - 任何時刻,僅允許一個程序在管程中執行某個內部過程
管程如何實現同步:
- 對共享變數互斥操作
- 管程的特點直接實現了該要求,程序一次一個進入管程呼叫內部過程操作共享變數。管程的互斥訪問完全由編譯程式在編譯時自動添上,無須程式設計師關心,能保證正確 - 操作的同步控制
- 靠條件變數的操作管理實現——進入管程但不能獲取資源操作的過程將阻塞,並在滿足條件時被喚醒執行
管程的同步控制(條件變數)
—— 主要作用就是程序同步的阻塞和喚醒控制 ——
- 普通變數
- 條件變數(用於控制程序阻塞和喚醒)
- 類似訊號量變數,但不取具體值;相當於每個阻塞佇列的佇列指標。
- 對條件變數的操作需結合對普通變數的條件判斷,從而控制程序狀態
管程的優點:
- 保證程序互斥的訪問共享資源,並方便的阻塞和喚醒程序
- 管程可增強模組的獨立性
- 可提高程式碼的可讀性,便與修改和維護,正確性易於保證