题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 种)。