![信號量機(jī)制-課堂練習(xí)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/12/7985b271-6ba5-42c0-8e36-5f342e4b40a6/7985b271-6ba5-42c0-8e36-5f342e4b40a61.gif)
![信號量機(jī)制-課堂練習(xí)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/12/7985b271-6ba5-42c0-8e36-5f342e4b40a6/7985b271-6ba5-42c0-8e36-5f342e4b40a62.gif)
![信號量機(jī)制-課堂練習(xí)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/12/7985b271-6ba5-42c0-8e36-5f342e4b40a6/7985b271-6ba5-42c0-8e36-5f342e4b40a63.gif)
![信號量機(jī)制-課堂練習(xí)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/12/7985b271-6ba5-42c0-8e36-5f342e4b40a6/7985b271-6ba5-42c0-8e36-5f342e4b40a64.gif)
![信號量機(jī)制-課堂練習(xí)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/12/7985b271-6ba5-42c0-8e36-5f342e4b40a6/7985b271-6ba5-42c0-8e36-5f342e4b40a65.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、用wait,signal操作解決進(jìn)程的同步和互斥問題,絕大部分題目可以按以下步驟解決:根據(jù)題目要求將每個進(jìn)程的執(zhí)行過程一步一步描述出來;分析每個進(jìn)程每一步的執(zhí)行條件,將條件一一記錄;比較各個條件,將同一條件歸為一個,若條件可以歸結(jié)為一種資源,設(shè)置一個信號量表示;注意:這里是做題,不是實現(xiàn)系統(tǒng),所以若某個條件題目中沒有加以說明或限制,則刪除;設(shè)置信號量初值:若信號量是代表某種資源,則為系統(tǒng)初始時的可使用的資源數(shù)或可使用資源的進(jìn)程數(shù),若為互斥則為“1”;重新分析每個進(jìn)程的每個步驟:若該步驟有執(zhí)行條件涉及信號量A,則在該步驟語句前加入wait(A);若該步驟有執(zhí)行后某個信號量B會增值,則在該步驟語句
2、后加入signal(B);注意:若某個步驟前同時有幾個wait操作,則一般同步信號量在前,互斥信號量在后;題目已經(jīng)做完,最后檢查各個進(jìn)程是否能按題目要求并發(fā)執(zhí)行,若可以,停止;若不可以,檢查上述過程,查找錯誤。例1 有一個生產(chǎn)者和一個消費(fèi)者共享容量為n的緩沖器(n均大于1),生產(chǎn)者把生產(chǎn)的物品存入緩沖器,而消費(fèi)者從緩沖器中取出物品去消費(fèi)。要求用wait,signal操作對生產(chǎn)者和消費(fèi)者進(jìn)行正確管理。第一步 根據(jù)題目要求將每個進(jìn)程的執(zhí)行過程一步一步描述出來:生產(chǎn)者進(jìn)程 L1: 生產(chǎn)一件產(chǎn)品;產(chǎn)品放入緩沖;goto L1;消費(fèi)者進(jìn)程 L2: 從緩沖中區(qū)走產(chǎn)品;消費(fèi)一件產(chǎn)品;goto L2;第二步
3、分析每個進(jìn)程每一步的執(zhí)行條件,將條件一一記錄:生產(chǎn)者進(jìn)程:生產(chǎn)一件產(chǎn)品的條件是有生產(chǎn)產(chǎn)品的原料,在題目中不曾提及,所以該條件不考慮,認(rèn)為這一步驟沒有限制條件;產(chǎn)品放入緩沖條件是要有產(chǎn)品、緩沖,由于前一步驟已經(jīng)生產(chǎn)出產(chǎn)品,所以這一步驟執(zhí)行是肯定有產(chǎn)品,這一步驟的限制條件是有緩沖;消費(fèi)者進(jìn)程:從緩沖中取走產(chǎn)品條件是緩沖中有產(chǎn)品和,這一步驟的限制條件是緩沖中的產(chǎn)品;消費(fèi)產(chǎn)品的條件是應(yīng)該是已獲得產(chǎn)品,由于前一步驟已經(jīng)獲得產(chǎn)品,所以這一步驟執(zhí)行是肯定有產(chǎn)品的,所以這一步驟沒有限制條件;第三步 比較各個條件,將同一條件歸為一個,設(shè)置一個信號量表示;根據(jù)第二步分析,本題中有四個限制條件:一個是緩沖,定義信號
4、量empty;一個是產(chǎn)品,定義信號量full;第四步 設(shè)置信號量初值:empty,full是資源數(shù)量,系統(tǒng)初始狀態(tài)應(yīng)該是緩沖均空,無產(chǎn)品,所以empty=n,full=0。第五步 重新分析每個進(jìn)程的每個步驟,加入wait,signal操作:生產(chǎn)者進(jìn)程:生產(chǎn)一件產(chǎn)品,無限制條件,且對上述四個信號量無影響;產(chǎn)品放入緩沖條件是緩沖,所以這條語句前加上wait(empty),這條語句執(zhí)行完后,應(yīng)該緩沖中產(chǎn)品會增加一個,所以這條語句后應(yīng)加入signal(full);消費(fèi)者進(jìn)程:從緩沖中取走產(chǎn)品條件是緩沖中有產(chǎn)品和無消費(fèi)者從緩沖中取產(chǎn)品,所以這條語句前加上wait(full),這條語句執(zhí)行完后,緩沖會增加
5、一個,所以這條語句后應(yīng)加入signal(S1);消費(fèi)產(chǎn)品無限制條件,且對上述四個信號量無影響。這樣生產(chǎn)者和消費(fèi)者進(jìn)程的過程修改為:生產(chǎn)者進(jìn)程 L1: 生產(chǎn)一件產(chǎn)品; wait(empty);產(chǎn)品放入緩沖;signal(full);goto L1;消費(fèi)者進(jìn)程 L2: wait(full);從緩沖中區(qū)走產(chǎn)品;signal(empty);消費(fèi)一件產(chǎn)品;goto L2;用一個數(shù)組B描述緩沖,k指示放產(chǎn)品的位置,t指示取產(chǎn)品的位置,則完整的生產(chǎn)者消費(fèi)者算法描述如下:semaphore empty=n,full=0;item buffern;int in=out=0;void producer() whi
6、le (1) produce an item in nextp; . wait(empty); bufferin=nextp; in=(in+1) mod n; signal(full); void consumer()while (1) . wait(full); nextc=bufferout; out=(out+1) mod n; signal(empty); . consume the item in nextc; main()cobegin producer();consumer(); 第六步 檢查:其中wait(S1)和signal(S1)之間的程序段是各生產(chǎn)者的相關(guān)臨界區(qū),保證了
7、生產(chǎn)者放產(chǎn)品的互斥;wait(S2)和signal(S2)之間的程序段是各消費(fèi)者的相關(guān)臨界區(qū),保證了消費(fèi)者的互斥;wait(empty)保證了有緩沖才可放產(chǎn)品,無緩沖時生產(chǎn)者等待;wait(full)保證了緩沖中有產(chǎn)品才可取產(chǎn)品,無產(chǎn)品時消費(fèi)者等待;signal(empty)讓消費(fèi)者通知系統(tǒng)釋放一個緩沖,有生產(chǎn)者等待緩沖時可將其喚醒;signal(full)讓通知生產(chǎn)者系統(tǒng)增加了一個產(chǎn)品,有消費(fèi)者等待產(chǎn)品時可將其喚醒。符合題目要求,題目完成。例1改 有m個生產(chǎn)者和r個消費(fèi)者共享容量為n的緩沖器(m,r,n均大于1),每個生產(chǎn)者都要把各自生產(chǎn)的物品存入緩沖器,而每個消費(fèi)者也都要從緩沖器中取出物品
8、去消費(fèi)。要求用wait,signal操作對這些生產(chǎn)者和消費(fèi)者進(jìn)行正確管理。在這個問題中生產(chǎn)者與消費(fèi)者之間應(yīng)該同步。由于沒有限定生產(chǎn)者生產(chǎn)的物品供哪個消費(fèi)者取用,也沒有限制消費(fèi)者只能取用哪些物品,因此,生產(chǎn)者只要測試到有緩沖器中尚未放滿物品就可把生產(chǎn)的物品存入,消費(fèi)者只要測試到緩沖器中有物品就可取出。下面是實現(xiàn)同步機(jī)制的過程。第一步 根據(jù)題目要求將每個進(jìn)程的執(zhí)行過程一步一步描述出來:生產(chǎn)者進(jìn)程 L1: 生產(chǎn)一件產(chǎn)品;產(chǎn)品放入緩沖;goto L1;消費(fèi)者進(jìn)程 L2: 從緩沖中區(qū)走產(chǎn)品;消費(fèi)一件產(chǎn)品;goto L2;第二步 分析每個進(jìn)程每一步的執(zhí)行條件,將條件一一記錄:生產(chǎn)者進(jìn)程:生產(chǎn)一件產(chǎn)品的條件
9、是有生產(chǎn)產(chǎn)品的原料,在題目中不曾提及,所以該條件不考慮,認(rèn)為這一步驟沒有限制條件;產(chǎn)品放入緩沖條件是要有產(chǎn)品、緩沖和無生產(chǎn)者向緩沖中放產(chǎn)品,由于前一步驟已經(jīng)生產(chǎn)出產(chǎn)品,所以這一步驟執(zhí)行是肯定有產(chǎn)品,這一步驟的限制條件是有緩沖和無生產(chǎn)者向緩沖中放產(chǎn)品;消費(fèi)者進(jìn)程:從緩沖中取走產(chǎn)品條件是緩沖中有產(chǎn)品和無消費(fèi)者從緩沖中取產(chǎn)品,這一步驟的限制條件是緩沖中的產(chǎn)品和無消費(fèi)者從緩沖中取產(chǎn)品;消費(fèi)產(chǎn)品的條件是應(yīng)該是已獲得產(chǎn)品,由于前一步驟已經(jīng)獲得產(chǎn)品,所以這一步驟執(zhí)行是肯定有產(chǎn)品的,所以這一步驟沒有限制條件;第三步 比較各個條件,將同一條件歸為一個,設(shè)置一個信號量表示;根據(jù)第二步分析,本題中有四個限制條件:一
10、個是緩沖,定義信號量empty;一個是無生產(chǎn)者向緩沖中放產(chǎn)品,定義信號量mutex1;一個是產(chǎn)品,定義信號量full;一個是無消費(fèi)者從緩沖中取產(chǎn)品,定義信號量mutex2。第四步 設(shè)置信號量初值:mutex1,mutex2是互斥信號量,每次只能由一個生產(chǎn)者(或消費(fèi)者)向緩沖中放產(chǎn)品(取產(chǎn)品),所以初值均為“1”;empty,full是資源數(shù)量,系統(tǒng)初始狀態(tài)應(yīng)該是緩沖均空,無產(chǎn)品,所以empty=n,full=0。第五步 重新分析每個進(jìn)程的每個步驟,加入wait,signal操作:生產(chǎn)者進(jìn)程:生產(chǎn)一件產(chǎn)品,無限制條件,且對上述四個信號量無影響;產(chǎn)品放入緩沖條件是緩沖和無生產(chǎn)者向緩沖中放產(chǎn)品,所以
11、這條語句前加上wait(empty)、wait(mutex1),這條語句執(zhí)行完后,應(yīng)該釋放互斥信號量mutex1和緩沖中產(chǎn)品會增加一個,所以這條語句后應(yīng)加入signal(mutex1)、signal(full);消費(fèi)者進(jìn)程:從緩沖中取走產(chǎn)品條件是緩沖中有產(chǎn)品和無消費(fèi)者從緩沖中取產(chǎn)品,所以這條語句前加上wait(full)、wait(mutex2),這條語句執(zhí)行完后,應(yīng)該釋放互斥信號量mutex2和緩沖中產(chǎn)品少了一個,緩沖會增加一個,所以這條語句后應(yīng)加入signal(mutex1)、signal(empty);消費(fèi)產(chǎn)品無限制條件,且對上述四個信號量無影響。這樣生產(chǎn)者和消費(fèi)者進(jìn)程的過程修改為:生產(chǎn)
12、者進(jìn)程 L1: 生產(chǎn)一件產(chǎn)品; wait(empty); wait(mutex1);產(chǎn)品放入緩沖;signal(mutex1);signal(full);goto L1;消費(fèi)者進(jìn)程 L2: wait(full); wait(mutex2);從緩沖中區(qū)走產(chǎn)品;signal(mutex2);signal(empty);消費(fèi)一件產(chǎn)品;goto L2;用一個數(shù)組B描述緩沖,k指示放產(chǎn)品的位置,t指示取產(chǎn)品的位置,則完整的生產(chǎn)者消費(fèi)者算法描述如下:semaphore mutex=1,empty=n,full=0;item buffern;int in=out=0;void producer() whil
13、e (1) produce an item in nextp; . wait(empty); wait(mutex); bufferin=nextp; in=(in+1) mod n; signal(mutex); signal(full); void consumer()while (1) . wait(full); wait(mutex); nextc=bufferout; out=(out+1) mod n; signal(mutex); signal(empty); . consume the item in nextc; main()cobegin producer();consum
14、er(); 第六步 檢查:其中wait(mutex1)和signal(mutex1)之間的程序段是各生產(chǎn)者的相關(guān)臨界區(qū),保證了生產(chǎn)者放產(chǎn)品的互斥;wait(mutex2)和signal(mutex2)之間的程序段是各消費(fèi)者的相關(guān)臨界區(qū),保證了消費(fèi)者的互斥;wait(empty)保證了有緩沖才可放產(chǎn)品,無緩沖時生產(chǎn)者等待;wait(full)保證了緩沖中有產(chǎn)品才可取產(chǎn)品,無產(chǎn)品時消費(fèi)者等待;signal(empty)讓消費(fèi)者通知系統(tǒng)釋放一個緩沖,有生產(chǎn)者等待緩沖時可將其喚醒;signal(full)讓通知生產(chǎn)者系統(tǒng)增加了一個產(chǎn)品,有消費(fèi)者等待產(chǎn)品時可將其喚醒。符合題目要求,題目完成。例2 現(xiàn)有四
15、個進(jìn)程R1、R2、W1、W2,它們共享可以存放一個數(shù)的緩沖器B。進(jìn)程R1每次把來自鍵盤的一個數(shù)存入緩沖器B中,供進(jìn)程W1打印輸出;進(jìn)程R2每次從磁盤上讀一個數(shù)存放到緩沖器B中,供進(jìn)程W2打印輸出。為防止數(shù)據(jù)的丟失和重復(fù)打印,問怎樣用wait,signal操作來協(xié)調(diào)這四個進(jìn)程的并發(fā)執(zhí)行。第一步 根據(jù)題目要求將每個進(jìn)程的執(zhí)行過程一步一步描述出來:進(jìn)程R1:Ll: 接收來自鍵盤的數(shù);x=接收的數(shù);B=x; -數(shù)據(jù)放入緩沖 goto L1;進(jìn)程R2:L2: 從磁盤上讀一個數(shù);y=讀入的數(shù);B=y; -數(shù)據(jù)放入緩沖 goto L2;進(jìn)程W1: L3: k=B; -從緩沖中取數(shù)據(jù)打印k中數(shù);goto L3
16、進(jìn)程W2: L4:j=B; -從緩沖中取中數(shù)據(jù) 打印j中數(shù);goto L4第二步 分析每個進(jìn)程每一步的執(zhí)行條件,將條件一一記錄:進(jìn)程R1:接收來自鍵盤的數(shù):執(zhí)行條件要有鍵盤,題目中無要求,所以不加考慮,無限制條件;x=接收的數(shù):x為進(jìn)程R1內(nèi)部變量,無需限制條件,此步驟無限制條件;B=x;:數(shù)據(jù)放入緩沖需要數(shù)據(jù)和緩沖,數(shù)據(jù)前面步驟一生成,所以限制條件為有空緩沖; 進(jìn)程R2(與進(jìn)程R1同理):從磁盤上讀一個數(shù):無限制條件;y=讀入的數(shù):無限制條件;B=y; :限制條件為有空緩沖;進(jìn)程W1:k=B;:從緩沖中取數(shù)據(jù)需要緩沖中有R1輸入數(shù)據(jù),所以限制條件為緩沖中有R1輸入的數(shù)據(jù);打印k中數(shù);:執(zhí)行條
17、件要有打印設(shè)備,題目中無要求,所以不加考慮,無限制條件;進(jìn)程W2(與進(jìn)程W1同理):j=B;:限制條件為緩沖中有R2輸入的數(shù)據(jù);打印j中數(shù);:無限制條件。第三步 比較各個條件,將同一條件歸為一個,設(shè)置一個信號量表示;根據(jù)第二步分析,本題中有三個限制條件,需要定義三個信號量:S:表示空緩沖器B。 S1:表示緩沖器中是否存有進(jìn)程R1讀入的數(shù)。S2:表示緩沖器中是否存有進(jìn)程R2讀入的數(shù)。第四步 設(shè)置信號量初值:系統(tǒng)初始狀態(tài),無數(shù)據(jù)讀入,緩沖為空,所以S的初值為1,S1和S2的初值為0;第五步 重新分析每個進(jìn)程的每個步驟,加入wait,signal操作:進(jìn)程R1:接收來自鍵盤的數(shù):無限制條件,執(zhí)行后對
18、上述三個信號量無增值作用;x=接收的數(shù):無限制條件,執(zhí)行后對上述三個信號量無增值作用;B=x;:限制條件為有空緩沖,語句前加入wait(S),執(zhí)行后緩沖中有進(jìn)程R1讀入的數(shù),對S1有增值作用,語句后加入signal(S1); 進(jìn)程R2(與進(jìn)程R1同理):從磁盤上讀一個數(shù):無限制條件,執(zhí)行后對上述三個信號量無增值作用;y=讀入的數(shù):無限制條件,執(zhí)行后對上述三個信號量無增值作用;B=y; :限制條件為有空緩沖,語句前加入wait(S),執(zhí)行后緩沖中有進(jìn)程R1讀入的數(shù),對S2有增值作用,語句后加入signal(S2);進(jìn)程W1:k=B;:限制條件為緩沖中有R1輸入的數(shù)據(jù),語句前加入wait(S1),
19、執(zhí)行后歸還緩沖,對S有增值作用,語句后加入signal(S);打印k中數(shù);:無限制條件,執(zhí)行后對上述三個信號量無增值作用;進(jìn)程W2(與進(jìn)程W1同理):j=B;:限制條件為緩沖中有R2輸入的數(shù)據(jù),語句前加入wait(S2),執(zhí)行后歸還緩沖,對S有增值作用,語句后加入signal(S);打印j中數(shù);:無限制條件,執(zhí)行后對上述三個信號量無增值作用。四個進(jìn)程可如下描述:semaphore S=1,S1=S2=0;buffer B;void R1()int x;while(1)接收來自鍵盤的數(shù);x=接收的數(shù);wait(S);B=x;signal(S1); void R2()int y;while(1)
20、從磁盤上讀一個數(shù);y=接收的數(shù);wait(S);B=y;signal(S2); void W1()int k;while(1) wait(Sl);k=B;signal(S);打印k中數(shù); void W2()int j;while(1)wait(S2);j=B;signal(S);打印j中數(shù); main() cobegin R1(); R2(); W1(); W2(); 第六步 檢查:在這里,進(jìn)程R1和進(jìn)程R2在向緩沖器B中存數(shù)之前調(diào)用了wait(S),這個wait(S)起兩個作用:由于S的初值為1,所以wait(S)限制了每次至多只有一個進(jìn)程可以向緩沖器中存入一個數(shù),起到了互斥地向緩沖器中存數(shù)
21、的作用;由于當(dāng)緩沖器中有數(shù)且尚未被取走時S的值為0,當(dāng)緩沖器中數(shù)被取走后S的值又為1,因此wait(S)起到了測試允許存入一個新數(shù)的消息是否到達(dá)的同步作用。進(jìn)程W1和進(jìn)程W2把需要的數(shù)取走后,都調(diào)用signal(S)發(fā)出可以存放一個新數(shù)的消息??梢?,在這個問題中信號量S既被作為互斥的信號量,又被作為同步的信號量。例 假定有三個進(jìn)程R、W1、W2共享一個緩沖器B,B中每次只能存放1個數(shù)。進(jìn)程R每次啟動輸入設(shè)備讀一個整數(shù)且把它存放到緩沖器B中。若存放到緩沖器中的是奇數(shù),則由進(jìn)程W1,將其取出打印;若存放到緩沖器中的是偶數(shù),則由進(jìn)程W2將其取出打印。同時規(guī)定進(jìn)程R僅當(dāng)緩沖器中無數(shù)時或緩沖器中的數(shù)已被
22、取出打印后才能再存放一個數(shù);進(jìn)程W1和進(jìn)程W2對存入緩沖器的數(shù)不能重復(fù)打印,也不能從空的緩沖器中取數(shù)。要求用wait,signal操作管理這三個并發(fā)進(jìn)程,使它們能正確地同步工作。第一步 根據(jù)題目要求將每個進(jìn)程的執(zhí)行過程一步一步描述出來:進(jìn)程R:Ll: 從輸入設(shè)備上讀一個數(shù);x=接收的數(shù);B=x; -數(shù)據(jù)放入緩沖 goto L1;進(jìn)程W1: L2: y=B; -從緩沖中取奇數(shù)打印y中數(shù);goto L2進(jìn)程W2: L3:z=B; -從緩沖中取中偶數(shù) 打印z中數(shù);goto L3第二步 分析每個進(jìn)程每一步的執(zhí)行條件,將條件一一記錄:進(jìn)程R:從輸入設(shè)備上讀一個數(shù):執(zhí)行條件要有輸入設(shè)備,題目中無要求,所以
23、不加考慮,無限制條件;x=接收的數(shù):x為進(jìn)程R內(nèi)部變量,無需限制條件,此步驟無限制條件;B=x;:數(shù)據(jù)放入緩沖需要數(shù)據(jù)和緩沖,數(shù)據(jù)前面步驟一生成,所以限制條件為有空緩沖;進(jìn)程W1:y=B;:從緩沖中取奇數(shù),限制條件為緩沖中有R輸入的奇數(shù);打印y中數(shù);:執(zhí)行條件要有打印設(shè)備,題目中無要求,所以不加考慮,無限制條件;進(jìn)程W2(與進(jìn)程W1同理):z=B;:限制條件為緩沖中有R輸入的偶數(shù);打印z中數(shù):無限制條件;第三步 比較各個條件,將同一條件歸為一個,設(shè)置一個信號量表示;根據(jù)第二步分析,本題中有三個限制條件,需要定義三個信號量:S:表示空緩沖器B。 SO:表示緩沖器中是否存有進(jìn)程R讀入的奇數(shù)。SE:
24、表示緩沖器中是否存有進(jìn)程R讀入的偶數(shù)。第四步 設(shè)置信號量初值:系統(tǒng)初始狀態(tài),無數(shù)據(jù)讀入,緩沖為空,所以S的初值為1,SO和SE的初值為0;第五步 重新分析每個進(jìn)程的每個步驟,加入wait,signal操作:進(jìn)程R:從輸入設(shè)備上讀一個數(shù):無限制條件,執(zhí)行后對上述三個信號量無增值作用;x=接收的數(shù):無限制條件,執(zhí)行后對上述三個信號量無增值作用;B=x;:限制條件為有空緩沖,語句前加入wait(S),執(zhí)行后,若讀入的數(shù)為奇數(shù),對SO有增值作用,語句后加入signal(SO),若讀入的數(shù)為偶數(shù),對SE有增值作用,語句后加入signal(SE);進(jìn)程W1:y=B;:限制條件為緩沖中有R輸入的奇數(shù),語句前
25、加入wait(SO),執(zhí)行后歸還緩沖,對S有增值作用,語句后加入signal(S);打印y中數(shù);:無限制條件,執(zhí)行后對上述三個信號量無增值作用;進(jìn)程W2(與進(jìn)程W1同理):z=B;:限制條件為緩沖中有R輸入的偶數(shù),語句前加入wait(SE),執(zhí)行后歸還緩沖,對S有增值作用,語句后加入signal(S);打印z中數(shù);:無限制條件,執(zhí)行后對上述三個信號量無增值作用。三個進(jìn)程可如下描述:semaphore S=1,SO=SE=0;buffer B;void R1()int x;while(1)從輸入設(shè)備上讀一個數(shù);x=接收的數(shù);wait(S);B=x;if B=奇數(shù) then signal(SO);
26、else signal(SE); void W1()int y;while(1) wait(SE);y=B;signal(S);打印y中數(shù); void W2()int z;while(1) wait(SO);z=B;signal(S);打印z中數(shù) ; main() cobegin R(); W1(); W2(); 第六步 檢查:wait(S)保證了進(jìn)程R只能向緩沖中放入一個整數(shù),若數(shù)據(jù)沒有取走,則只能等待;wait(SO)保證進(jìn)程W1只能取走奇數(shù),若無奇數(shù)則等待;wait(SE)保證進(jìn)程W2只能取走偶數(shù),若無偶數(shù)則等待;if B=奇數(shù) then signal(S);else signal(SE
27、);保證了存入奇數(shù)時喚醒W1,存入偶數(shù)時喚醒W;signal(S)可歸還緩沖,可喚醒進(jìn)程R。練習(xí): 今有3個并發(fā)進(jìn)程R,M,P,它們共享一個緩沖器B。進(jìn)程R負(fù)責(zé)從輸入設(shè)備讀信息,每讀出一個記錄后把它存放在緩沖器B中。進(jìn)程M在緩沖器B中加工進(jìn)程R存入的記錄。進(jìn)程P把加工后的記錄打印輸出。緩沖器B中每次只能存放一個記錄,當(dāng)記錄被加工輸出后,緩沖器B中又可存放一個新記錄。請用PV操作為同步機(jī)制寫出它們并發(fā)執(zhí)行時能正確工作的程序。Semaphore S1=1,S2=S3=0; void R()int x; while(1)從輸入設(shè)備上讀一個數(shù);x=接收的數(shù);wait(S1);B=x;signal(S2
28、); void M()while(1) wait(S2);加工B中數(shù)據(jù);signal(S3); void P()int z; while(1) wait(S3);z=B;signal(S1);打印z中數(shù); Main()cobegin R(); M(); P();2考慮三個吸煙者進(jìn)程和一個經(jīng)銷商進(jìn)程的系統(tǒng)。每個吸煙者連續(xù)不斷地做煙卷并抽他做好的煙卷,做一支煙卷需要煙草、紙和火柴三種原料。這三個吸煙者分別掌握有煙草、紙和火柴。經(jīng)銷商源源不斷地提供上述三種原料,但他只將其中的兩種原料放在桌上,具有另一種原料的吸煙者就可以做煙卷并抽煙,且在做完后給經(jīng)銷商發(fā)信號,然后經(jīng)銷商再拿出兩種原料放在桌上,如此反復(fù)。試設(shè)計一個同步算法來描述他們的活動。設(shè)smokerA擁有煙草,需要紙和火柴 設(shè)紙和火柴為信號量A設(shè)smokerB擁有紙 ,需要煙草和火柴 設(shè)煙草和火柴為信號量B設(shè)smokerC擁有火柴,需要
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工安全協(xié)議書的法律法規(guī)與標(biāo)準(zhǔn)依據(jù)
- 2025年醫(yī)藥公司宿舍房屋租賃合同范文
- 2025年債權(quán)債務(wù)清算執(zhí)行協(xié)議
- 2025年建筑現(xiàn)澆樓板合同樣本
- 2025年光學(xué)計量標(biāo)準(zhǔn)器具項目提案報告模板
- 2025年企業(yè)籌資借款策劃合同范本
- 2025年住宅購置合同樣式
- 2025年臨時員工聘用協(xié)議規(guī)定
- 2025年個人司機(jī)工作合同
- 2025年企業(yè)消費(fèi)信貸擔(dān)保協(xié)議范本
- 二零二五年度文化教育培訓(xùn)中心承包工程2篇
- 2025年廣州中醫(yī)藥大學(xué)順德醫(yī)院(佛山市順德區(qū)中醫(yī)院)招考聘用高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年華僑港澳臺學(xué)生聯(lián)招考試英語試卷試題(含答案詳解)
- 2025-2030年中國美容院行業(yè)營銷創(chuàng)新戰(zhàn)略制定與實施研究報告
- 中國高血壓防治指南(2024年修訂版)
- 春節(jié)后復(fù)工安全教育培訓(xùn)考試試題及答案
- 參保人員就醫(yī)流程doc
- 微觀經(jīng)濟(jì)學(xué)圖示分析匯總分解(共17頁)
- 現(xiàn)場材料浪費(fèi)罰款單(精編版)
- ABB智能定位器TZID-C調(diào)試說明書(中文正式版)
- (完整版)倉儲客戶需求調(diào)研表.doc
評論
0/150
提交評論