【答案解析】[解析] 这类题目其实不难,但这种题却很容易答错,原因就是很容易漏掉某种情况。
首先,将上述进程分解成以下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。