1.管程(英語:monitors,也稱為監視器) 是一種程式結構,結構內的**多個子程式(物件或模組)**形成的多個工作執行緒互斥訪問共享資源。這些共享資源一般是硬體裝置或一群變數。管程實現了在乙個時間點,最多只有乙個執行緒在執行管程的某個子程式。與那些通過修改資料結構實現互斥訪問的併發程式設計相比,管程實現很大程度上簡化了程式設計系統中的各種硬體資源和軟體資源,均可用資料結構抽象地描述其資源特性,即用少量資訊和對資源所執行的操作來表徵該資源,而忽略了它們的內部結構和實現細節。利用共享資料結構抽象地表示系統中的共享資源,而把對該共享資料結構實施的操作定義為一組過程。
像乙個中介站,程式利用共享資源要通過這個的子程式(操作具體共享資源的乙個過程,已經將具體硬體軟體資源抽象成一種資料結構,對這個過程進行操作相當於使用資源),最多乙個執行緒執行保證互斥。
2.管程的條件變數:條件變數是在管程內部的資料結構,且只有在管程內才能被訪問,它對管程內所有過程是全域性的,只能通過wait(),signal()兩個操作訪問。
wait():掛起呼叫程序並釋放管程,直至另一程序在條件變數上執行signal()。
signal():如果有其他程序因對條件變數執行wait()而被掛起,便釋放之,如果沒有程序等待,則訊號被忽略,不儲存。
wait和signal是利用資源的內部語句,條件變數相當於要用的資源,如果已經被別的呼叫,就wait改變量,用好了別的資源會signal,然後這個程式再利用
3.管程有乙個很重要的特性,即任一時刻管程中只能有乙個活躍程序,這一特性使管程能有效地完成互斥。管程是程式語言的組成部分,編譯器知道它們的特殊性,因此可以採用與其他過程呼叫不同的方法來處理對管程的呼叫。典型的處理方法是,當乙個程序呼叫管程過程時,該過程中的前幾條指令將檢查在管程中是否有其他的活躍程序。如果有,呼叫程序將被掛起,直到另乙個程序離開管程將其喚醒。如果沒有活躍程序在使用管程,則該呼叫程序可以進入。
4. 從語言的角度看,管程主要有以下特性:
(1)模組化。管程是乙個基本程式單位,可以單獨編譯;
(2)抽象資料型別。管程是中不僅有資料,而且有對資料的操作;
(3)資訊掩蔽。管程外可以呼叫管程內部定義的一些函式,但函式的具體實現外部不可見;
5.簡單點說就是只能被單個執行緒執行的**了,舉個例子假如乙個管程類叫atm(取款機),裡面有兩個方法叫提款 取款,不同的人為不同的執行緒,但是atm只允許乙個人在乙個時間段中進行操作,也就是單執行緒,那麼這個atm就需要乙個鎖,單一個人在使用時,其他的人只能wait。再者乙個人如果使用的時間太長也不行,所以需要乙個條件變數來約束他。條件變數可以讓乙個執行緒等待時讓另一線程進入管程,這樣可以有效防止死鎖
6.因為呼叫wait原語後,使程序等待的原因有多種,為了區別它們,引入了條件變數,就是為了排不同wait的佇列(等待原因不同)
作業系統 管程
在前面 程序 中提到,有訊號量與互斥量之後,似乎程序間通訊就很容易了。但事實上並不然,pv操作不慎是很容易導致兩個程序都被阻塞的,這種情況就叫做死鎖 dead lock 為了更容易編寫出正確的程式,1973和1974年hansen與hoare提出了另一種高階同步原語,稱為管程 monitor 但他們...
作業系統原理 管程
將共享變數及操作共享變數的所有方法封裝在乙個模組中。一組區域性變數 共享變數 操作區域性變數的一組方法 區域性變數的初始語句 任何程序只能通過管程提供的入口才能訪問共享資料 任何時刻只允許乙個程序訪問管程的某個方法 對共享變數的互斥操作 管程的特點決定了對共享資源的互斥操作,管程同一時刻只允許乙個程...
作業系統之管程
管程的出現是一種程序同步工具。管程的特性保持了程序互斥,無須程式設計師自己實現互斥,從而降低了死鎖發生的可能性。同時管程提供了條件變數,可以讓程式設計師靈活地實現程序同步。管程有點類似於在物件導向時候學習到的類。管程有四個部分組成 管程的名字 區域性於管程內部的共享結構資料說明 對該資料結構進行操作...