當前位置:首頁 > IT技術

管程的理解

時間:2019-10-08 07:44:26來源:IT技術作者:seo實驗室小編閱讀:56次「手機版」
 

一、?????管程的概念

1.?????管程可以看做一個軟件模塊,它是將共享的變量和對于這些共享變量的操作封裝起來,形成一個具有一定接口的功能模塊,進程可以調用管程來實現進程級別的并發控制。

2.?????進程只能互斥得使用管程,即當一個進程使用管程時,另一個進程必須等待。當一個進程使用完管程后,它必須釋放管程并喚醒等待管程的某一個進程。

3.?????在管程入口處的等待隊列稱為入口等待隊列,由于進程會執行喚醒操作,因此可能有多個等待使用管程的隊列,這樣的隊列稱為緊急隊列,它的優先級高于等待隊列。

二、?????管程的特征

1.?????模塊化。

管程是一個基本的軟件模塊,可以被單獨編譯。

2.?????抽象數據類型。

管程中封裝了數據及對于數據的操作,這點有點像面向對象編程語言中的類。

3.?????信息隱藏。

管程外的進程或其他軟件模塊只能通過管程對外的接口來訪問管程提供的操作,管程內部的實現細節對外界是透明的。

4.?????使用的互斥性。

任何一個時刻,管程只能由一個進程使用。進入管程時的互斥由編譯器負責完成。

三、???? enter過程、leave過程、條件型變量c、wait(c)?、signal(c)

1.???? enter過程

一個進程進入管程前要提出申請,一般由管程提供一個外部過程--enter過程。如monitor.enter()表示進程調用管程Monitor外部過程enter進入管程。

2.???? leave過程

當一個進程離開管程時,如果緊急隊列不空,那么它就必須負責喚醒緊急隊列中的一個進程,此時也由管程提供一個外部過程—leave過程,如Monitor.leave()表示進程調用管程Monitor外部過程leave離開管程。

3.?????條件型變量c

條件型變量c實際上是一個指針,它指向一個等待該條件的PCB隊列。如notfull表示緩沖區不滿,如果緩沖區已滿,那么將要在緩沖區寫入數據的進程就要等待notfull,即wait(notfull)。相應的,如果一個進程在緩沖區讀數據,當它讀完一個數據后,要執行signal(notempty),表示已經釋放了一個緩沖區單元。

4.???? wait(c)

wait(c)表示為進入管程的進程分配某種類型的資源,如果此時這種資源可用,那么進程使用,否則進程被阻塞,進入緊急隊列。

5.???? signal(c)

signal(c)表示進入管程的進程使用的某種資源要釋放,此時進程會喚醒由于等待這種資源而進入緊急隊列中的第一個進程。

相關閱讀

分享到:

欄目導航

推薦閱讀

熱門閱讀

美国扑克50手登陆 排列三综合走势图 安徽11选5官方 全国前三配资 福建十一选五任选基走势图 淑女派对 1月29比分推荐 欧美a片mp4下载 双色球幸运之门500期走势图 东莞沐足店都带服务吗 大乐透开奖直播 幸运11选5开奖 麻将高手讲解技术视频 彩票5分赛车 8波比分即时比分网足球即时比分 快乐飞艇开奖网 江西时时彩