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

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

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

浓缩知识点

用信号量PV操作实现前趋图同步的核心规则是,若进程A必须先于进程B执行,需为该前趋关系设置专属信号量,在A执行结束前执行V操作释放该信号量,在B开始执行前执行P操作获取该信号量,以此保证B在A完成后才启动;若某进程存在多个前驱进程,则需为每个前趋关系分别设置信号量,该进程启动前需对所有前驱对应的信号量依次执行P操作,确保所有前驱进程全部完成后自身才开始运行。此外,PV操作的基础逻辑为:P操作用于申请资源或进入等待状态,若信号量值为0则会阻塞当前进程;V操作用于释放资源或唤醒等待队列中的进程,执行后会增加信号量值,若有进程因该信号量阻塞则会唤醒其中一个。

正确答案
D

本题考察的是用信号量PV操作实现前趋图同步
规则是:若A必须先于B完成,则在A处执行V(对应信号量),在B开始前执行P(同一信号量);若一个结点需等待多个前驱,则对每个前驱分别设置一个P操作。

问题1
①在P1中、②在P2开始处,分别用于体现P1→P3与P1→P2、P2→后继的等待关系。
A选项 V(S1) 和 P(S2):V(S1)应放在P1结束前用于唤醒P2,而不是①处;且P2应等待来自P1的S1而非S2,错误。
B选项 P(S1) 和 V(S2):P1内不应做P操作自我阻塞;P2开始前应等待S1而不是释放S2,错误。
C选项 V(S1) 和 V(S2):P2开始处需要等待而非再次V,错误。
D选项 V(S2) 和 P(S1):P1对P3这条前驱另设信号量S2,①处V(S2)用于将来唤醒P3;②处P(S1)使P2在得到P1的V(S1)之前不能执行,符合P1→P2与P1→P3,正确。
选择选项 D。

问题2
③在P3开始处、④在P3结束处。P3需等待P1与P2均完成,然后把完成信号发给P5。
A选项 V(S3) 和 V(S5):③应为等待来自P2的S3而不是V,错误。
B选项 P(S3) 和 V(S5):P3在P(S2)之后再执行P(S3),表示同时等待P1与P2;完成后V(S5)通知P5,正确。
C选项 V(S3) 和 P(S5):③方向反了;④不应在P3里做P(S5),错误。
D选项 P(S3) 和 P(S5):④应是向后继发信号而非再等待,错误。
选择选项 B。

问题3
⑤在P4结束处、⑥在P5开始处。P5须等待来自P3与P4的两个完成信号。
A选项 P(S6) 和 P(S5)P(S6):⑤应为V操作而不是P,错误。
B选项 V(S5) 和 V(S5)V(S6):⑤属于P4给P5的完成信号,但应是V(S6);⑥处需要P而不是V,错误。
C选项 V(S6) 和 P(S5)P(S6):P4完成后V(S6);P5开始前同时等待来自P3的S5和来自P4的S6,正确。
D选项 P(S6) 和 P(S5)P(S6):⑤用P会阻塞P4自身,错误。
选择选项 C。

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