最近開始看操作系統的書(本身不是這個方向的),單看書本管程還是不能完全理解,現在簡單總結一下吧。
1.管程 (英語:Monitors,也稱為監視器) 是一種程序結構,結構內的多個子程序(對象或模塊)形成的多個工作線程互斥訪問共享資源。這些共享資源一般是硬件設備或一群變數。管程實現了在一個時間點,最多只有一個線程在執行管程的某個子程序。與那些通過修改數據結構實現互斥訪問的並發程序設計相比,管程實現很大程度上簡化了程序設計系統中的各種硬件資源和軟件資源,均可用數據結構抽象地描述其資源特性,即用少量信息和對資源所執行的操作來表征該資源,而忽略了它們的內部結構和實現細節。利用共享數據結構抽象地表示系統中的共享資源,而把對該共享數據結構實施的操作定義為一組過程。
像一個中介站,程序利用共享資源要通過這個的子程序(操作具體共享資源的一個過程,已經將具體硬件軟件資源抽象成一種數據結構,對這個過程進行操作相當於使用資源),最多一個線程執行保證互斥。
2.管程的條件變量:條件變量是在管程內部的數據結構,且只有在管程內才能被訪問,它對管程內所有過程是全局的,只能通過wait(),signal()兩個操作訪問。
wait():掛起調用進程並釋放管程,直至另一進程在條件變量上執行signal()。 signal():如果有其他進程因對條件變量執行wait()而被掛起,便釋放之,如果沒有進程等待,則信號被忽略,不保存。 wait和signal是利用資源的內部語句,條件變量相當於要用的資源,如果已經被別的調用,就wait改變量,用好了別的資源會signal,然後這個程序再利用 3.管程有一個很重要的特性,即任一時刻管程中只能有一個活躍進程,這一特性使管程能有效地完成互斥。管程是編程語言的組成部分,編譯器知道它們的特殊性,因此可以采用與其他過程調用不同的方法來處理對管程的調用。典型的處理方法是,當一個進程調用管程過程時,該過程中的前幾條指令將檢查在管程中是否有其他的活躍進程。如果有,調用進程將被掛起,直到另一個進程離開管程將其喚醒。如果沒有活躍進程在使用管程,則該調用進程可以進入。 4. 從語言的角度看,管程主要有以下特性:http://xxxxxx/Linuxjc/1152693.html TechArticle