单选题 设有如下两个优先级相同的进程P1和P2。信号量S1和S2的初值均为0,试问P1、P2并发执行结束后,z的值可能是______。
进程P1:
V=j;
z=2;
V(S1);
z=y+1;
P(S2);
y=z+y;
进程P2:
x=2;
P(S1);
x=x+2;
V(S2);
z=x+z;
    
  • A.4、8、11
  • B.4、6
  • C.6、8
  • D.4、8
【正确答案】 D
【答案解析】[解析] 这类题目其实不难,但这种题却很容易答错,原因就是很容易漏掉某种情况。
首先,将上述进程分解成以下6个程序段:
PS1:y=3;
  z=2;
PS2:z=y+1; PS3:y=z+y;
PS4:x=2; PS5:x=x+2; PS6:z=x+z;
假设没有PV操作的情况下。进程并发执行关系用前驱图表示如图1所示。 加入了PV操作后用前驱图表示如图2所示。 由于x的值只有PS4、PS5决定,且两者顺序关系确定,则易得x的值始终为4。又P2和P1共享的变量只有z,则PS6与PS1、PS2、PS3的关系决定了最终的y和z的值。又根据进程前驱图得,PS6在PS1之后。所以可能的情况有(PS4、PS5所处的顺序有多种情况,但都不对最后结果产生影响,为了方便,我们统一把PS4、PS5放在PS1后面执行): PS1、PS4、PS5、PS6、PS2、PS3: PS1、PS4、PS5、PS2、PS6、PS3: PS1、PS4、PS5、PS2、PS3、PS6: 这3种情况,计算过程如下表所示。
[*]
图1 进程并发执行关系的前驱图
[*]
图2 加入PV操作后的前驱图
{{B}}计算过程{{/B}}
x y z x y z x y z
PS1 3 2 PS1 3 2 PS1 3 2
PS4 2 PS4 2 PS4 2
PS5 4 PS5 4 PS5 4
PS6 6 PS2 4 PS2 4
PS2 4 PS6 8 PS3 7
PS3 7 PS3 11 PS6 8
4 7 4 4 11 8 4 7 8
综上所述,z的值可能是4、8。