管程機制

管程的引入

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

管程概念

Hansan為管程所下的定義是:管程定義了一個數據結構和能為並發進程所執行的一組操作,這組操作能同步進程和改變管程中的數據。
管程的構成
局部於管程的共享數據結構對共享數據結構進行操作的一組函式
對局部於管程的數據設定初始值的語句
管程的語法
Monitormonitor_name;/*管程名*/
variabledeclarations;/*共享變數說明*/
voidEntryP1(...)/*對數據結構操作的函式*/
{…}
voidEntryP2(...)
{…}

voidEntryPn(...)
{…}
{
initializationcode;/*設初值語句*/
}

管程的基本特性

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

條件變數

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

相關詞條

相關搜尋

熱門詞條

聯絡我們