查看更多
当前 - 选择题 - 信号量
简单
单选题
2017年5月第37题
#操作系统
#信号量
#第二版教材
#凯恩建议必须掌握

进程P1 、P2、P3、P4、P5 和 P6 的前趋图如下所示:

若用 PV 操作控制这6个进程的同步与互斥的程序如下,那么程序中的空①和空②处应分别为(问题1); 空③和空④处应分别为(问题2);空⑤和空⑥处应分别为(问题3)

正确答案C
凯恩解析

本题考察的是用信号量(P/V)实现前趋图给定的进程同步关系。前趋图关系为:P1→P2,P1→P3,P2→P3,P2→P4,P3→P4,P3→P5,P4→P6,P5→P6。代码中各信号量用于“事件完成”通知:先执行者执行完对相应 S 做V,后继在开始前对相应 S 做P

问题1
A选项 V(S1) V(S2) 和 P(S2):② 若为 P(S2),则 P2 等待的是 P1→P3 的信号,无法保证 P1→P2,错误。
B选项 P(S1) P(S2) 和 V(S2):① 在 P1 内做 P 操作会阻塞自身,不符合“先行者发信号”的规则,错误。
C选项 V(S1) V(S2) 和 P(S1):① 在 P1 完成后发出对 P2、P3 的启动信号;② 使 P2 在开始前等待 P1 完成,满足 P1→P2,正确。
D选项 P(S1) P(S2) 和 V(S1):同 B,① 会把 P1 阻塞,错误。
所以选择 C。

问题2
A选项 V(S3) 和 V(S5) V(S6):③ 若为 V(S3)则 P3 不等待 P2 完成,违背 P2→P3,错误。
B选项 P(S3) 和 V(S5) V(S6):③ 先对 S3 执行 P,确保 P2 执行完(P2 结束时 V(S3)、V(S4))才允许 P3 继续;④ 在 P3 结束后向后继 P4、P5 分别发信号 S5、S6,满足 P3→P4、P3→P5,正确。
C选项 V(S3) 和 P(S5) P(S6):④ 改为等待会把 P3 自己阻塞在结束后,不合逻辑,错误。
D选项 P(S3) 和 P(S5) P(S6):④ 不应等待而应通知后继,错误。
所以选择 B。

问题3
A选项 P(S6) 和 P(S7) V(S8):⑤ 不应等待而应在 P4 完成后通知 P6,错误。
B选项 V(S6) 和 V(S7) V(S8):⑤ 发 S6 与前义不符(S6 是 P3→P5 用),且 ⑥ 应等待而非再发信号,错误。
C选项 P(S6) 和 P(S7) P(S8):⑤ 等待会阻塞 P4,错误。
D选项 V(S7) 和 P(S7) P(S8):⑤ P4 完成后向 P6 发 S7;⑥ P6 在开始前同时等待来自 P4 的 S7 和来自 P5 的 S8,满足 P4→P6 与 P5→P6,正确。
所以选择 D。

联系我们
隐私协议
用户协议
微信公众号
知乎
小红书
浙ICP备2021029036号
@2022-2026
嘉兴市安芯网络科技有限公司 版权所有