返回
当前 - 选择题 - 信号量信号量
简单
高频
进程P1、P2、P3、P4、P5和P6的前趋图如下所示:

若用PV操作控制这6个进程的同步与互斥的程序如下,那么程序中的空①和空②处应分别为(P (S1)和V(S2));空③和空④处应分别为(V(S4)V(S5)和P(S3));空⑤和空⑥处应分别为(V (S6)和P(S5))。

浓缩知识点
知识点PV操作是实现进程同步与互斥的经典机制,P操作用于申请信号量,若信号量值为0则进程阻塞等待;V操作用于释放信号量,会唤醒等待该信号量的进程。在基于前趋图的进程同步场景中,需遵循核心规则:前驱进程执行结束后,需对每个后继进程对应的同步信号量执行V操作,告知后继进程自身已完成;后继进程启动前,需对所有依赖的前驱进程对应的同步信号量执行P操作,确保所有前驱进程均已执行完毕。同步信号量初始值通常设为0,若存在多组前驱后继依赖关系,需为每组关系单独设置信号量,避免依赖混淆;若是互斥场景,互斥信号量初始值设为1,用于保护临界区资源,进入临界区前执行P操作,退出时执行V操作。
正确答案
B
本题考察的是前趋图约束下的PV信号量同步设计。
核心原则:前驱完成时执行V释放信号量,后继开始前执行P等待该信号量。据图可知依赖关系为:P1→P2;P2→P3、P4;P3→P4、P5;P4、P5→P6。
问题1:
A选项 V(S1)和P(S2):应在P2开始前等待P1完成,因此应P(S1)而非V,错误。
B选项 P(S1)和V(S2):P2在开始前等待S1(由P1结束V(S1)释放);P2完成后需唤醒P3(依赖P2),因此V(S2),正确。
C选项 V(S1)和V(S2):开始前不应V(S1),错误。
D选项 V(S2)和P(S1):次序不符,错误。
所以选择 B。
