第2章 2-5信號量習(xí)題

1.讀者與寫者問題(寫者優(yōu)先方式)

讀者優(yōu)先的關(guān)鍵:

? ????????若讀者先占有互斥信號量馍迄,只有最后一個讀者離開,計數(shù)降為0時才釋放信號量煤禽,導(dǎo)致寫者弱勢键兜。

寫者優(yōu)先同上述方法:

? ????????寫者先占有某信號后,直到最后一個寫者走完才釋放該信號映挂,讀者才能進(jìn)入泽篮。

????????????????增加一個互斥信號量S,讀者和寫者都爭搶該信號柑船;

????????????????對寫者也進(jìn)行計數(shù)咪辱,第1個寫者申請S,其他寫者不需要申請S椎组;最后一個寫者離開時才釋放信號量S.

????????????????一旦寫者先申請到了S油狂,則所有的讀者只能等待寫者都走完才可進(jìn)入共享讀。而多個寫者通過S后寸癌,仍要爭搶wmutex信號以完成互斥的寫入专筷。

用到的變量

????????讀者間起作用:

????????????????Readcount變量,rmutex信號量

????????寫者間起作用:

????????????????writecount變量蒸苇,mutex信號量

????????讀者與寫者間起作用:

????????????????wmutex

? ? ? ? ? ? ? ? S

2.黑白棋子問題

問題描述

? ????????兩個人下棋磷蛹,一方執(zhí)黑棋,一方執(zhí)白棋溪烤。要求雙方輪流下子味咳。給出兩種情況的解決辦法:

? ????????????????1)執(zhí)黑子一方先下

? ? ? ? ? ? ? ? ? 2)雙方都可以先下,誰先搶到棋盤誰先下檬嘀。然后開始輪流下子槽驶。

3.嗜睡的理發(fā)師問題

問題描述

? ????????一個理發(fā)店有N個沙發(fā),1個理發(fā)椅鸳兽;

????????理發(fā)師:

????????????????持續(xù)睡覺掂铐,理發(fā),收錢的動作

????????顧客:

????????????????若有沙發(fā)揍异,進(jìn)入等待全陨;否則離開。

????????????????理發(fā)椅空衷掷,一顧客放棄沙發(fā)辱姨,去喚醒它理發(fā);

????????????????理發(fā)后付費(fèi)戚嗅,付費(fèi)完畢離開理發(fā)椅雨涛,離店碗旅。

?共享變量count的使用需要互斥。

?注意if分支加入后P镜悉、V操作配對核對清楚

4.生產(chǎn)與銷售問題

問題描述

? ????????設(shè)一無限大倉庫。就1個門医瘫,不允許同時入庫侣肄,也不允許邊入庫邊出庫。

????????????1)兩個生產(chǎn)者A,B生產(chǎn)各自的產(chǎn)品入庫醇份;但要求滿足關(guān)系Sa-Sb在限定的[-n,m]差值范圍內(nèi)稼锅。

????????????2)一個銷售者取產(chǎn)品銷售,但對兩種產(chǎn)品的賣出進(jìn)度要把握在Ma-Mb也在[-n,m]范圍內(nèi)僚纷。

同步關(guān)系分析

????????互斥:三人在對倉庫的使用上必須互斥(mutex=1)

????????順序關(guān)系:

????????????????1)生產(chǎn)者AB之間:因為假設(shè)倉庫無限大矩距,不需考慮空的限制〔澜撸控制其能否生產(chǎn)的關(guān)鍵是再生產(chǎn)一個能否滿足Sa-Sb在限定的[-n,m]范圍內(nèi)锥债。

????????????????????????????A、B關(guān)心的都是各自的生產(chǎn)指標(biāo)數(shù)量痊臭,即A關(guān)心x=A-B這個變量的值哮肚,同樣B關(guān)心y=B-A。

????????????????????????????初值:初始若無產(chǎn)品广匙,A最多可生產(chǎn)m個允趟,B最多可生產(chǎn)n個。自己生產(chǎn)一個必然使對方可以多生產(chǎn)一個鸦致。

????????????????2)生產(chǎn)與消費(fèi)之間

????????????????????????????關(guān)心賣出的A潮剪、B間的差值

信號量機(jī)制的不足:

? ? ? ? 信號量的控制分布在多個進(jìn)程中

????????????????正確性分析困難;

????????????????分散的P分唾、V操作:易出錯抗碰,使用不當(dāng)可能導(dǎo)致死鎖。

????????????????修改绽乔、維護(hù)困難:易讀性差改含,任一修改都可能影響全局;測試期間發(fā)現(xiàn)錯誤困難迄汛,即使發(fā)現(xiàn)錯誤也不容易定位出錯位置捍壤。

管程(monitor)機(jī)制

????????1973年,Hoare和Hanson提出管程思想:將共享變量及對共享變量能夠進(jìn)行的所有操作集中在一個模塊中鞍爱。(把信號量及其操作原語“封裝”在一個對象內(nèi)部)

1.管程的組成

????????①一組局部變量

????????②對局部變量操作的一組過程

????????③對局部變量進(jìn)行初始化的語句鹃觉。(聯(lián)想面向?qū)ο笾械念悾?/p>

2.管程特點

????????????任何進(jìn)程只能通過調(diào)用管程提供的過程入口才能進(jìn)入管程訪問共享數(shù)據(jù);

????????????????????就如同使用臨界資源睹逃,就要先通過其信號量的申請盗扇。

????????????任何時刻祷肯,僅允許一個進(jìn)程在管程中執(zhí)行某個內(nèi)部過程。

管程如何實現(xiàn)同步疗隶?

????????對共享變量互斥操作:

????????????????管程的特點直接實現(xiàn)了該要求佑笋,進(jìn)程一次一個進(jìn)入管程調(diào)用內(nèi)部過程操作共享變量。

????????????????管程的互斥訪問完全由編譯程序在編譯時自動添上斑鼻,無須程序員關(guān)心蒋纬,能保證正確。

????????操作的同步控制:

????????????????靠條件變量的操作管理實現(xiàn)坚弱。

????????????????進(jìn)入管程但不能獲取資源操作的過程將阻塞蜀备,并在滿足條件時被喚醒執(zhí)行。

生產(chǎn)者-消費(fèi)者問題的管程解決方法

3.條件變量

????????(主要作用就是進(jìn)程同步的阻塞和喚醒控制)

????????局部于管程的變量有兩種:

????????????????普通變量

????????????????條件變量(用于控制進(jìn)程阻塞和喚醒)

????????????????????????類似信號量變量荒叶,但不取具體值碾阁;相當(dāng)于每個阻塞隊列的隊列指針。

????????????????????????對條件變量的操作需結(jié)合對普通變量的條件判斷些楣,從而控制進(jìn)程狀態(tài)脂凶。

關(guān)于條件變量的操作

????????x.wait將執(zhí)行進(jìn)程掛到x對應(yīng)的等待隊列上;

????????x.signal喚醒x相應(yīng)的等待隊列上的一個進(jìn)程愁茁。

????????????????signal操作艰猬,是重新啟動一個被阻塞的進(jìn)程,但如果沒有進(jìn)程被阻塞埋市,則不產(chǎn)生任何效果

????????????????而信號量機(jī)制中的signal操作冠桃,若沒有需要喚醒的進(jìn)程,必須要做的還有修改信號量變量的值道宅。

管程的優(yōu)點

????????保證進(jìn)程互斥地訪問共享變量食听,并方便地阻塞和喚醒進(jìn)程。管程可以以函數(shù)庫的形式實現(xiàn)污茵。相比之下樱报,管程比信號量好控制。

????????管程可增強(qiáng)模塊的獨(dú)立性:系統(tǒng)按資源管理的觀點分解成若干模塊泞当,用數(shù)據(jù)表示抽象系統(tǒng)資源迹蛤,使同步操作相對集中,從而增加了模塊的相對獨(dú)立性

????????引入管程可提高代碼的可讀性襟士,便于修改和維護(hù)盗飒,正確性易于保證:采用集中式同步機(jī)制。一個操作系統(tǒng)或并發(fā)程序由若干個這樣的模塊所構(gòu)成陋桂,一個模塊通常較短逆趣,模塊之間關(guān)系清晰。

管程的缺點

????????大多數(shù)常用的編程語言中沒有實現(xiàn)管程嗜历,如果某種語言本身不支持管程宣渗,那么加入管程是很困難的抖所。

????????雖然大多數(shù)編程語言也沒有實現(xiàn)信號量,但可將P痕囱、V操作作為一個獨(dú)立的子例程或操作系統(tǒng)的管理程序調(diào)用加入田轧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鞍恢,隨后出現(xiàn)的幾起案子傻粘,更是在濱河造成了極大的恐慌,老刑警劉巖有序,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異岛请,居然都是意外死亡旭寿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門崇败,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盅称,“玉大人,你說我怎么就攤上這事后室∷跸ィ” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵岸霹,是天一觀的道長疾层。 經(jīng)常有香客問我,道長贡避,這世上最難降的妖魔是什么痛黎? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮刮吧,結(jié)果婚禮上湖饱,老公的妹妹穿的比我還像新娘。我一直安慰自己杀捻,他們只是感情好井厌,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著致讥,像睡著了一般仅仆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上垢袱,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天蝇恶,我揣著相機(jī)與錄音,去河邊找鬼惶桐。 笑死撮弧,一個胖子當(dāng)著我的面吹牛潘懊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贿衍,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼授舟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贸辈?” 一聲冷哼從身側(cè)響起释树,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎擎淤,沒想到半個月后奢啥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嘴拢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年桩盲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片席吴。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡赌结,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出孝冒,到底是詐尸還是另有隱情柬姚,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布庄涡,位于F島的核電站量承,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏穴店。R本人自食惡果不足惜宴合,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望迹鹅。 院中可真熱鬧卦洽,春花似錦、人聲如沸斜棚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚤霞。三九已至,卻和暖如春义钉,著一層夾襖步出監(jiān)牢的瞬間昧绣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工捶闸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留夜畴,地道東北人拖刃。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像贪绘,于是被迫代替她去往敵國和親兑牡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容