题24
题目
有两个并发进程, 对于如下这段程序的运行, 正确的说法是 ( )。
int x,y,z,t,u;
P1()
{
while(1){
x=1;
y=0;
if (x>=1) then y=y+1;
z=y;
}
}
P2()
{
while(1){
x=0;
t=0;
if (x<=1) then t=t+2;
u=t;
}
}A.程序能正确运行,结果唯一
B.程序不能正确运行,可能有两种结果
C.程序不能正确运行,结果不确定
D.程序不能正确运行,可能会死锁
分析
无法判断的是先加载的是哪一个x的值
解
C
- 程序不能正确运行,结果不确定
- 本题中两个进程不能正确地工作, 运行结果的可能性详见下面的说明。
- If
then - if
then
- 不确定的原因是由于使用了公共变量
,考查程序中与变量 有关的语句共四处,执行的顺序是 时,结果是 - 并发执行过程是
时,结果是 - 执行的顺序是
时,结果是 - 执行的顺序是
时,结果是 - 可见结果有多种可能性。
- 很明显,无论执行顺序如何,
的结果只能是 0 或 1,因此语句 7 的条件一定成立,即 2 的结果是一定的; 而 必定成立,只可能有 0,1 两种情况,又不可能出现 的情况, 所以总共只有 3 种结果 (答案中的 3 种)。