管程(monitor)機(jī)制
????將共享變量及對(duì)共享變量能夠進(jìn)行的所有操作集中在一個(gè)模塊中。(把信號(hào)量及其操作原語(yǔ)“封裝”在一個(gè)對(duì)象內(nèi)部)
管程的組成
1、一組局部變量
2、對(duì)局部變量操作的一組過程
3、對(duì)局部變量進(jìn)行初始化的語(yǔ)句。
管程的特點(diǎn)
1、任何進(jìn)程只能通過調(diào)用管程提供的過程入口才能進(jìn)入管程訪問共享數(shù)據(jù);
2、任何時(shí)刻,僅允許一個(gè)進(jìn)程在管程中執(zhí)行某個(gè)內(nèi)部過程。
管程如何實(shí)現(xiàn)同步?
1、對(duì)共享變量互斥操作:
? ? 管程的特點(diǎn)直接實(shí)現(xiàn)了該要求,進(jìn)程一次一個(gè)進(jìn)入管程調(diào)用內(nèi)部過程操作共享變量。
? ? 管程的互斥訪問完全由編譯程序在編譯時(shí)自動(dòng)添上,無須程序員關(guān)心,能保證正確。
2、操作的同步控制:
????靠條件變量的操作管理實(shí)現(xiàn)。
????進(jìn)入管程但不能獲取資源操作的過程將阻塞,并在滿足條件時(shí)被喚醒執(zhí)行。
管程的優(yōu)點(diǎn)
1、保證進(jìn)程互斥地訪問共享變量,并方便地阻塞和喚醒進(jìn)程。管程可以以函數(shù)庫(kù)的形式實(shí)現(xiàn)。相比之下,管程比信號(hào)量好控制。
2、管程可增強(qiáng)模塊的獨(dú)立性:系統(tǒng)按資源管理的觀點(diǎn)分解成若干模塊,用數(shù)據(jù)表示抽象系統(tǒng)資源,使同步操作相對(duì)集中,從而增加了模塊的相對(duì)獨(dú)立性
3、引入管程可提高代碼的可讀性,便于修改和維護(hù),正確性易于保證:采用集中式同步機(jī)制。一個(gè)操作系統(tǒng)或并發(fā)程序由若干個(gè)這樣的模塊所構(gòu)成,一個(gè)模塊通常較短,模塊之間關(guān)系清晰。
管程的缺點(diǎn)
????大多數(shù)常用的編程語(yǔ)言中沒有實(shí)現(xiàn)管程,如果某種語(yǔ)言本身不支持管程,那么加入管程是很困難的。
????雖然大多數(shù)編程語(yǔ)言也沒有實(shí)現(xiàn)信號(hào)量,但可將P、V操作作為一個(gè)獨(dú)立的子例程或操作系統(tǒng)的管理程序調(diào)用加入。