问答题 下面是两个并发执行的进程。它们能正确运行吗?若不能请举例说明,并对其改正。 parbegin var x:integer; process P1 var y,z:integer; begin x:=1; y:=0; if x>=1 then y:=y+1; z:=y; end process P2 var t,u:integer; begin: x:=0; t:=0; if x<=1 then t:=t+2; u:=t; endparend
【正确答案】上述两个并发执行的进程共享整型变量x,且共享时没能做到互斥,因此它们的执行结果具有不确定性。若先执行P1,并在它执行完语句x:=1后进行进程调度,执行P2,并在P2结束后再调度执行P1,则最后结果是x=y=z=0,t=u=2。若先执行P1,并在它执行完if语句后再调度P2执行,则最后结果是x=0,y=z=1,t=u=2。 可将上述程序改正为(本题按照原题的pascal语法书写): Parbegin var x:interger; s:semaphore:=1; process P1 var y,z:integer; begin P(s); x:=1; y:=0; if x>=1 then y:=y+1; v(s); z:=y; end process P2 var t,u:integer; begin: P(s); x:=0; t:=0; if x<=1 then t:=t+2; v(s) u:=t; endparend
【答案解析】