第3章-部分習(xí)題答案_第1頁
第3章-部分習(xí)題答案_第2頁
第3章-部分習(xí)題答案_第3頁
第3章-部分習(xí)題答案_第4頁
第3章-部分習(xí)題答案_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第 3 章 部分習(xí)題答案3.2 . 為什么進(jìn)程在進(jìn)入臨界區(qū)之前,應(yīng)先執(zhí)行"進(jìn)入?yún)^(qū) "代碼,在退出臨界區(qū)后又執(zhí)行"退出區(qū) "代碼 ?為了實(shí)現(xiàn)多個(gè)進(jìn)程對臨界資源的互斥訪問,必須在臨界區(qū)前面增加一段用于檢查欲訪問的臨界資源是否正被訪問的代碼,如果未被訪問,該進(jìn)程便可進(jìn)入臨界區(qū)對資源進(jìn)行訪問,并設(shè)置正被訪問標(biāo)志,如果正被訪問,則本進(jìn)程不能進(jìn)入臨界區(qū),實(shí)現(xiàn)這一功能的代碼成為 " 進(jìn)入?yún)^(qū) " 代碼;在退出臨界區(qū)后,必須執(zhí)行 "退出區(qū) " 代碼,用于恢復(fù)未被訪問標(biāo)志.3.3 同步機(jī)構(gòu)應(yīng)遵循哪些基本準(zhǔn)則 ?為什么 ?a. 空閑讓進(jìn)

2、 .b. 忙則等待 .c. 有限等待 .d. 讓權(quán)等待 .3.6 你認(rèn)為整型信號量機(jī)制和記錄型信號量機(jī)制,是否完全遵循了同步機(jī)構(gòu)的四條準(zhǔn)則 ?a. 在整型信號量機(jī)制中,未遵循 " 讓權(quán)等待 " 的準(zhǔn)則 .b. 記錄型信號量機(jī)制完全遵循了同步機(jī)構(gòu)的 " 空閑讓進(jìn) , 忙則等待 , 有限等待 , 讓權(quán)等待" 四條準(zhǔn)則 .3.9 在生產(chǎn)者消費(fèi)者問題中,如果缺少了 signal(full) 或 signal(empty), 對執(zhí)行結(jié)果會(huì)有何影響?生產(chǎn)者消費(fèi)者問題可描述如下:var mutex,empty,full: semaphore:=1,n,0;buffer

3、: array0,.,n-1 of item;in,out: integer:=0,0;beginparbeginproducer: beginrepeat produce an item in nextp;wait(empty);wait(mutex); buffer(in):=nextp;in:=(in+1) mod n; signal(mutex);/* * */signal(full);/*/until false;endconsumer: beginrepeatwait(full);wait(mutex);nextc:=buffer(out);out:=(out+1) mod n;

4、signal(mutex);/* * */signal(empty);/* * */consume the item in nextc;until false;endparendend可見,生產(chǎn)者可以不斷地往緩沖池送消息,如果緩沖池滿,就會(huì)覆蓋原有數(shù)據(jù),造成數(shù)據(jù)混亂. 而消費(fèi)者始, 造成無限等待 .終因 wait(full) 操作將消費(fèi)進(jìn)程直接送入進(jìn)程鏈表進(jìn)行等待,無法訪問緩沖池3.10 在生產(chǎn)者消費(fèi)者問題中,如果將兩個(gè)wait 操作即 wait(full) 和 wait(mutex) 互換位置;或者是將signal(mutex) 與 signal(full) 互換位置結(jié)果會(huì)如何 ?var m

5、utex,empty,full: semaphore:=1,n,0;buffer: array0,.,n-1 of item;in,out: integer:=0,0;begin parbegin producer: begin repeat produce an item in nextp;wait(empty);wait(mutex);buffer(in):=nextp;in:=(in+1) mod n;/* * */ signal(full);signal(mutex);/* * */ until false;end consumer: begin repeat /* * */ wait

6、(mutex);wait(full);/* * */ nextc:=buffer(out);out:=(out+1) mod n;signal(mutex);signal(empty);consume the item in nextc;until false;end parendendwait(full) 和 wait(mutex) 互換位置后,因?yàn)閙utex 在這兒是全局變量,執(zhí)行完wait(mutex) ,則 mutex賦值為 0 , 倘若 full 也為 0 ,則該生產(chǎn)者進(jìn)程就會(huì)轉(zhuǎn)入進(jìn)程鏈表進(jìn)行等待, 而生產(chǎn)者進(jìn)程會(huì)因全局變量mutex為 0 而進(jìn)行等待,使full 始終為0,這樣就形

7、成了死鎖.而 signal(mutex) 與 signal(full) 互換位置后,從邏輯上來說應(yīng)該是一樣的 .3.11 我們?yōu)槟撑R界區(qū)設(shè)置一把鎖W當(dāng) W=1時(shí),表示關(guān)鎖;W=0時(shí),表示鎖已打開.試寫出開鎖原語和關(guān)鎖原語,并利用它們?nèi)?shí)現(xiàn)互斥.開鎖原語 :unlock(W):W=0;關(guān)鎖原語 :lock(W);if(W=1) do no_op;W=1;利用開關(guān)鎖原語實(shí)現(xiàn)互斥 :var W: semaphore:=0;beginparbeginprocess :beginrepeatlock(W);critical sectionunlock(W);remainder sectionuntil

8、false;endparend3.12 試修改下面生產(chǎn)者消費(fèi)者問題解法中的錯(cuò)誤:producer:begin ducer an item in nextp;wait(mutex);wait(full); /* 應(yīng)為 wait(empty), 而且還應(yīng)該在wait(mutex) 的前面 */buffer(in):=nextp;/* 緩沖池?cái)?shù)組游標(biāo)應(yīng)前移: in:=(in+1) mod n; */signal(mutex);/* signal(full); */until false;endconsumer:begin repeat wait(mutex);wait(empty

9、); /* 應(yīng)為 wait(full), 而且還應(yīng)該在wait(mutex) 的前面 */nextc:=buffer(out);out:=out+1; /* 考慮循環(huán),應(yīng)改為 : out:=(out+1) mod n; */ signal(mutex);/* signal(empty); */ consumer item in nextc;until false; end3.13 試?yán)糜涗浶托盘柫繉懗鲆粋€(gè)不會(huì)出現(xiàn)死鎖的哲學(xué)家進(jìn)餐問題的算法.設(shè)初始值為 1 的信號量 cI 表示 I 號筷子被拿(I=1,2,3,4,.,2n),其中 n 為自然數(shù) .send(I): Begin if I mod

10、 2=1 then P(cI); P(cI-1 mod 5); Eat;V(cI-1 mod 5);V(cI); else P(cI-1 mod 5); P(cI);Eat;V(cI);V(cI-1 mod 5); End 3.14 在測量控制系統(tǒng)中的數(shù)據(jù)采集任務(wù),把所采集的數(shù)據(jù)送一單緩沖區(qū);計(jì)算任務(wù)從該單緩沖中取出數(shù) 據(jù)進(jìn)行計(jì)算 . 試寫出利用信號量機(jī)制實(shí)現(xiàn)兩者共享單緩沖的同步算法.int mutex=1;int empty=n;int full=0;int in=0;int out=0; main()cobeginsend();obtain();coendsend()while(1).co

11、llect data in nextp;.wait(empty);wait(mutex);buffer(in)=nextp;in=(in+1) mod n;signal(mutex);signal(full);/sendobtain()while(1)wait(full);wait(mutex);nextc:=buffer(out);out:=(out+1) mod n;signal(mutex);signal(empty);culculate the data in nextc;/while/obtain3.19什么是AND言號量?試?yán)肁ND言號量寫出生產(chǎn)者消費(fèi)者問題的解法.為解決并行所帶

12、來的死鎖問題,在wait操作中引入AND條件,其基本思想是將進(jìn)程在整個(gè)運(yùn)行過程中所需要的所有臨界資源,一次性地全部分配給進(jìn)程,用完后一次性釋放 .解決生產(chǎn)者消費(fèi)者問題可描述如下:var mutex,empty,full: semaphore:=1,n,0;buffer: array0,.,n-1 of item;in,out: integer:=0,0;beginparbeginproducer: begin repeat produce an item in nextp;.wait(empty);wait(s1,s2,s3,.,sn); /s1,s2,.,sn為執(zhí)行生產(chǎn)者進(jìn)程除empty 外其余的條件wait(mutex);buffer(in):=nextp;in:=(in+1) mod n;signal(mutex);signal(full);signal(s1,s2,s3,.,sn);until false;endconsumer: beginrepeatwait(full);wait(k1,k2,k3,.,kn); /k1,k2,.,kn為執(zhí)行消費(fèi)者進(jìn)程除full 外其余的條件wait(mutex);nextc:=buffer(out);out:=(out+1) mod n;signal(mutex);signal(empt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論