複製鏈接
請複製以下鏈接發送給好友

管程機制

鎖定
管程機制是一個數據結構和能為併發進程所執行的一組操作,這組操作能同步進程和改變管程中的數據。
中文名
管程機制
解決問題
解決了進程同步的描述問題
提    出
1971年
作    者
Dijkstra

管程機制管程的引入

信號量機制的引入解決了進程同步的描述問題,但信號量的大量同步操作分散在各個進程中不便於管理,還有可能導致系統死鎖。如:生產者消費者問題中將P、V顛倒可能死鎖。
為此Dijkstra於1971年提出:把所有進程對某一種臨界資源的同步操作都集中起來,構成一個所謂的秘書進程。凡要訪問該臨界資源的進程,都需先報告秘書,由秘書來實現諸進程對同一臨界資源的互斥使用。

管程機制管程的構成

局部於管程的共享數據結構
對共享數據結構進行操作的一組函數
對局部於管程的數據設置初始值的語句

管程機制管程的語法

Monitor monitor _name;/*管程名*/
variable declarations; /*共享變量説明*/
void Entry P1(...) /*對數據結構操作的函數*/
{ … }
void Entry P2(...)
{ … }
void Entry Pn(...)
{ … }
{initialization code; /*設初值語句*/}

管程機制管程的基本特性

局部於管程的數據只能被局部於管程內的函數所訪問。
一個進程只有通過調用管程內的函數才能進入管程訪問共享數據。
每次僅允許一個進程在管程內執行某個函數。
由於管程是一個語言成分,所以管程的互斥訪問完全由編譯程序在編譯時自動添加上,無需程序員關心,而且保證正確。

管程機制條件變量

利用管程實現同步時,還應設置條件變量和在條件變量上進行操作的兩個同步原語
條件變量用於區別各種不同的等待原因。其説明形式為: condition : x,y;
同步原語wait和signal。wait使調用進程等待,並將它排在相應的等待隊列上;signal喚醒等待隊列的隊首進程。使用方式為:x.wait,x.signal。