问答题
下面是两个并发执行的进程。它们能正确运行吗?若不能请举例说明,并改正之。
Var x:integer;
Process p1 Process p2
Var y,z:integer; Var t,u:integer;
Begin Begin
x:=1; ① x:=0; ②
y:=0; ③ t:=0; ⑥
if x>=1 then y:=y+1; ④ if x<=1 then t:=t+2; ⑦
z:=y; ⑤ u:=t; ⑧
end end
【正确答案】
【答案解析】遍历x是两个进程的共享资源,在进程同时申请访问时很容易出错。若采用顺序执行的方法,结构为y=1,z=1,t=2,u=2;若采用并发的方式,并按顺序①②③④⑤⑥⑦⑧执行,则结果为y=0,z=0,出错。改正的方法是为临界资源x设置信号量S,初值为1。程序如下:
Parbegin
Var x:integer;
Process P1 Process P2
Vat y,z:integer; Var t,u:integer;
Begin Begin
P(S); P(S);
x:=1; ① x:=0; ②
y:=0; ③ t:=0; ⑥
if x>=1 then y:=y+1; ④ if x<=1 then t:=t+2; ⑦
V(S); V(S);
z:=y; ⑤ u:=t; ⑧
end end
Parend