管程機制處理程序同步問題

2021-07-23 14:25:34 字數 987 閱讀 6859

程序同步機制有很多,主要有pv操作和訊號量,管程,以及訊息傳遞等。

由於pv操作的使用分散在各個程序之中,不利於對臨界資源的統一管理,還有pv操作的使用需要小心,若順序不對,或忘乙個沒寫,很容易陷入死鎖,所以,管程就能解決上面問題。

管程的基本思路是:將分散在各個程序中的臨界區集中起來進行統一控制和管理,並且將系統中的共享資源用資料結構抽象的描述出來,然後對臨界區的訪問通過管程進行統一管理

管程:就是由若干個資料結構、變數,以及方法(函式)所組織成的一種特殊的結構。

管程有以下特性:

①互斥性,任何時刻只能最多乙個程序進入管程活動,其他想進入管程必須等待。

②安全性,管程中的區域性變數只能由管程的方法或函式來訪問,其他程序或管程是不能夠對該區域性變數進行直接訪問

③共享性,管程中的特定的方法或函式可以被其他管程或程序訪問,這樣的方法或函式應該有特殊說明。

管程的一般結構:

struct minitor

。。。

void 函式名(){}

void init()

}; 在管程有一類特殊的變數稱為條件變數,即condition變數。由於管程的訪問具有互斥性,所以要引入條件變數,條件變數是管程的一種特殊的資料結構,在條件變數有兩個相關操作wait()和signal()。他們都是原語,不可被打斷

執行wait()原語的程序被阻塞,同時開放管程,將當前程序排在某條件變數的等待佇列中,執行signal()原語,喚醒在對應條件變數的上的程序。

漢森方法實現管程:

wait()原語:即等待原語,當乙個程序由於自身原因進行不下去了,就執行該原語,從而開放管程,自己進入阻塞態。

signal()原語:喚醒在相應條件變數上的等待程序佇列的乙個程序,執行signal()的程序要立即離開管程。

check()原語:檢查管程是否可用,若可用,則進入,不可用,則進入等待呼叫狀態。

release()原語:檢查是否有等待呼叫的程序,若有,則喚醒該程序,無,則開放管程。

程序同步問題

有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生 但若某個寫程序和其他程序 讀程序或寫程序 同時訪問共享資料時則可能導致資料不一致的錯誤。因此要求 允許多個讀者可以同時對檔案執行讀操作 只允許乙個寫者往檔案中寫資訊 任一寫者在完成寫操作之前不允許其他讀者或寫者工...

經典程序同步問題

文章出處 http heikediguo2005.blog.163.com blog static 2211971200910254235533 依據訊號量與程序的關係,我們可把程序中使訊號量分成私用訊號量和公用訊號量。私有訊號量是指只與制約程序和被制約程序有關的訊號量 公用訊號量是指與一組併發程序...

執行緒 程序同步問題

計算機網路課程實驗要做乙個c s模型的檔案傳遞程式。本來socket程式設計我還是比較熟悉的,因為以前用vc mfc編過乙個網路遊戲 網路五子棋,並通過設定nat與新加坡的同學對戰了一把。這次的程式本來更簡單,但是老師要用純windows api來寫,不准用其他的類庫,於是工作的重點就轉移到了怎樣構...