1. 讀者與寫者(寫者優(yōu)先方式)
2. 黑白棋問題
3. 嗜睡的理發(fā)師問題
4. 生產(chǎn)與銷售問題
讀者與寫者問題
(寫者優(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
黑白棋子問題
問題描述
兩個人下棋饭庞,一方執(zhí)黑棋戒悠,一方執(zhí)白棋。要求雙方輪流下子舟山。給出兩種情況的解決辦法:
1)執(zhí)黑子一方先下
2)雙方都可以先下绸狐,誰先搶到棋盤誰先下。然后開始輪流下子累盗。
2)先搶到棋盤者先下寒矿,然后輪流下子
問題分析:
【】無法用單純的信號量操作完成,因為初始值無法設(shè)置固定值若债。
【】爭搶棋盤需要一個互斥信號m符相;加入if控制與標(biāo)志判斷。利用互斥信號量與特殊標(biāo)志變量的結(jié)合使用實現(xiàn)有序控制。
嗜睡的理發(fā)師問題
問題描述
一個理發(fā)店有N個沙發(fā)啊终,1個理發(fā)椅镜豹;
理發(fā)師:
持續(xù)睡覺,理發(fā)蓝牲,收錢的動作
顧客:
【】若有沙發(fā)趟脂,進(jìn)入等待;否則離開例衍。
【】理發(fā)椅空昔期,一顧客放棄沙發(fā),去喚醒它理發(fā)肄渗;
【】理發(fā)后付費镇眷,付費完畢離開理發(fā)椅,離店翎嫡。
生產(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)與消費之間
【】關(guān)心賣出的A参淫、B間的差值
2)生產(chǎn)與銷售的關(guān)系
【】銷售要做的:
【】是否有商品救湖?
設(shè)置總商品數(shù)S,每次wait(S)
【】有商品涎才,是A還是B?
設(shè)置A,B商品計數(shù)的信號量SA,SB鞋既。對某種商品執(zhí)行取就wait(SA)
【】是否可以取?
p取操作要滿足銷售產(chǎn)品的關(guān)系涛救。所以wait(SA/SB)前面需要判斷控制---判斷差值difference