单选题
有两个并发进程如下所示,对于这段程序的运行,正确的说法是______。
int x, y, z, t,
u;
P1(){
P2(){
while(true){
while(true){
x=1;
x=0;
y=0;
t=0;
if(x>=1)
y=y+1; if(x<=1) t=t+2;
z=y;
u=t;
}
}
}
}
- A.程序能正确运行,结果唯一
- B.程序不能正确运行,可能有两种结果
- C.程序不能正确运行,结果不确定
- D.程序不能正确运行,可能会死锁
【正确答案】
C
【答案解析】本题中两个进程不能正确地工作,运行结果的可能性详见下面说明。
首先将语句编号,以方便分析。
1.x=1; 5.x=0;
2.y=0; 6.t=0
3.if(x>=1) y=y+1; 7.if(x<=1) t=t+2;
4.z=y; 8.u=t;
不确定的原因是由于使用了公共的变量x,考查程序中与x变量有关的语句共4处,若执行的顺序是1→2→3→4→5→6→7→8时,结果是y=1,z=1,t=2,u=2,x=0;当并发执行过程是1→2→5→6→3→4→7→8时,结果是y=0,z=0,t=2,u=2,x=0;若执行的顺序是5→6→7→8→1→2→3→4时,结果是y=1,z=1,t=2,u=2,x=1;若执行的顺序是5→6→1→2→7→8→3→4时,结果是y=1,z=1,t=0,u=0,x=1;可见结果有多种可能性。