问答题 设有两个优先级相同的进程P1和P2,见下表。信号量S1和S2的初值均为0,试问P1、P2并发执行结束后,x、y、z的值各为多少?
进程P1和P2
进程P1 进程P2
y=1;
y=y+2;
V(S1);
z=y+1;
P(S2);
y=z+y;
x=1;
x=x+2;
P(S1);
x=x+y;
V(S2);
z=x+z;
【正确答案】可以将上述进程分解成以下6个程序段:
[*]

并将它们的并发执行关系用前驱图(见图)描述出来。根据Bernstein条件(见[解释]),程序PS1和PS4的确是能并发执行的,程序段PS2与PS5也能并发执行,而程序段PS3和PS6则不能并发执行,或者说它们的并发执行具有不可再现性。若先执行PS3,再执行PS6,则最后x,y,z的值分别为6,7,10;若先执行PS6,再执行PS3,则最后x,y,z的值分别为6,13,10。
[*]

[解释] Bernstein条件是讲两个过程如果有数据冲突(Data Hazard),那么就没法并行执行。比如过程A生成数据d,而过程B需要输入数据d,那么B就需要A的输入,它们就没法并行执行(写后读问题,RAW)。如果二者会影响后续过程需要的数据,尤其是该数据和它们执行的顺序很有关系,那么它们同样也不能并行执行(写后写问题,WAW)。
【答案解析】