第 27 题
有两个优先级相同的并发程序 P1 和 P2,它们的执行过程如下所示,假设当前信号量 s1=0,s2=0。当前的 z=2,进程运行结束后,x、y 和 z 的值分别是( )。
A. 5,9,9 B. 5,9,4 C. 5,12,9 D. 5,12,4
[tag_link]
正确答案:C
首先分析进程同步关系。 信号量 `s1` 和 `s2` 初始值为 0,因此 P2 中的 `P(s1)` 必须等待 P1 执行 `V(s1)` 后才能继续,而 P1 中的 `P(s2)` 必须等待 P2 执行 `V(s2)` 后才能继续。 这强制了执行顺序:P1 必须先执行到 `V(s1)`,P2 才能执行 `P(s1)` 之后的代码; P2 必须执行到 `V(s2)`,P1 才能执行 `P(s2)` 之后的代码。
具体执行顺序如下:
- P1 执行: → → (覆盖初始 )→ `V(s1)` 使 。 >
- P1 执行 `P(s2)`,但 ,因此阻塞。 >
- P2 执行: → → `P(s1)` 因 而继续, → (此时 来自 P1)→ (此时 来自 P1)→ `V(s2)` 使 。 >
- P1 因 而唤醒,执行 (此时 来自 P2, 来自之前)。 >
最终, , , ,对应选项 C。 > 其他选项的数值与上述计算不符,因此 C 正确。 >