管程機制

管程機制是一個數據結構和能為並發進程所執行的一組操作,這組操作能同步進程和改變管程中的數據。

基本介紹

  • 中文名:管程機制
  • 解決問題:解決了進程同步的描述問題
  • 提出: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。

相關詞條

熱門詞條

聯絡我們