精品文档---下载后可任意编辑第三章 作业参考答案P181 第 3 题:答:现对进程语句进行编号,以方便描述。P1: P2:begin begin y:=1; ① x:=1; ⑤ y:=y+3; ② x:=x+5; ⑥ V(S1); P(S1); z:=y+1; ③ x:=x+y; ⑦ P(S2); V(S2); y:=z+y ④ z:=z+x; ⑧ end. end.①、②、⑤和⑥是不相交语句,可以任何次序交错执行,而结果是唯一的。接着无论系统如何调度进程并发执行,当执行到语句⑦时,可以得到 x=10,y=4。按Bernstein 条件,语句③的执行结果不受语句⑦的影响,故语句③执行后得到 z=5。最后,语句④和⑧并发执行,这时得到了两种结果为:语句④先执行:x=10,y=9,z=15。语句⑧先执行:x=10,y=19,z=15。 此外,还有第三种情况,语句③被推迟,直至语句⑧后再执行,于是依次执行以下三个语句:z:=z+x;z:=y+1;精品文档---下载后可任意编辑 y:=z+y;这时 z 的值只可能是 y+1=5,故 y=z+y=5+4=9,而 x=10。第三种情况为:x=10,y=9,z=5。P181 第 5 题:解:设信号量 empty,mutex;empty:=100;mutex:=1;parbegin读者进入:beginP(empty);P(mutex);登记;P(mutex);End;读者离开:begin P(mutex);撤消登记;V(mutex);V(empty);End;Parend;精品文档---下载后可任意编辑P181 第 6 题:答:实质上是两个进程的同步问题,设信号量 S1 和 S2 分别表示可拣白子和黑子,不失一般性,若令先拣白子。Main( ){ int S1=1, S2=0; CobeginP1( );P2( ); Coend}P182 第 15 题:Dijkstra 临界区软件算法描述如下:var flag:array[0…n] of (idle,want-in,in_cs);turn:integer;tune:0 or 1 or…or,n-1;process Pi(i=0,1,…,n-1)var j;integer; begin repeatrepeat flag[i]:=want_in; while turn≠i do P1( ){ while(拣子工作没完成) { P(S1); 拣白子 V(S2); } }P2( ){ while(拣子工作没完成) { P(S2); 拣黑子 V(S1); } }精品文档---下载后可任意编辑 if flag[turn]==idle then turn:=i; flag[i]:=in_cs; j:=0; while (j