单选题 有两个并发进程如下所示,对于这段程序的运行,正确的说法是______。
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;可见结果有多种可能性。