查看更多
当前 - 选择题 - 信号量
简单
单选题
2017年5月第37题
#第二版教材
#必须掌握

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

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

浓缩知识点

首先明确PV操作的核心作用:P操作用于进程等待同步信号或申请临界资源,执行时信号量减1,若结果小于0则进程阻塞等待;V操作用于进程完成后发送同步信号或释放临界资源,执行时信号量加1,若结果小于等于0则唤醒一个等待该信号量的进程。

在基于前趋图的进程同步场景中,需遵循“先行者发信号,后继者等信号”的核心规则:若存在前趋关系X→Y,即X执行完成后Y才能启动,那么X的代码执行结束后,必须针对对应同步信号量执行V操作,向Y传递完成信号;Y的代码启动前,必须针对同一信号量执行P操作,等待X的完成信号。

当一个进程有多个后继(如X→Y、X→Z)时,X执行结束后要分别对Y、Z对应的同步信号量执行V操作,分别通知所有后继进程可以启动;当一个进程有多个前趋(如X→Y、Z→Y)时,Y启动前要分别对X、Z对应的同步信号量执行P操作,确保所有前趋进程都完成后再开始执行。

同时要规避常见错误:进程不能在自身代码开头对同步信号量执行P操作,否则会导致自身阻塞无法执行;同步信号量的初始值通常设为0,因为初始状态下没有前驱进程完成,后继进程需要等待信号。

正确答案
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
嘉兴市安芯网络科技有限公司 版权所有