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

若用PV操作控制进程P1~P4并发执行的过程,则需要设置5个信号量S1、S2、S3、S4和S5,且信号量S1-S5的初值都等于0。下图中a、b和c处应分别填写(问题1);d、e和f处应分别填写(问题2)。

本题考察的是用信号量实现前驱约束(进程同步)。
信号量初值为0表示“需等待”。在前趋图中,每一条有向边用一个信号量表示“前驱完成后释放,后继开始时等待”。根据图中依赖关系:P1→P2 用S1,P1→P3 用S2,P3→P2 用S3,P2→P4 用S4,P3→P4 用S5。
问题1:
A选项 V(S1)V(S2)、P(S1)V(S3)和V(S4):b处为P2开始位置,P2应等待P1与P3完成,应为P(S1)与P(S3)同时等待,但该项把P(S3)放在V后续组合不当,且缺少对S3的等待顺序一致性表达,错误。
B选项 P(S1)V(S2)、P(S1)P(S2)和V(S1):a处在P1末尾应释放给P2和P3的两个信号量,应为V(S1)与V(S2),而不是P;c处应释放给P4的是S4,而不是V(S1),错误。
C选项 V(S1)V(S2)、P(S1)P(S3)和V(S4):a为P1结束后向P2、P3分别发信号,故V(S1)V(S2)正确;b为P2开始需等待来自P1和P3的S1与S3,故P(S1)P(S3)正确;c为P2结束后通知P4可继续,故V(S4)正确。此项正确。
D选项 P(S1)P(S2)、V(S1)P(S3)和V(S2):a处错误地用P;c处应发S4而非S2,错误。
所以选择 C。
问题2:
A选项 P(S2)、V(S3)V(S5)和P(S4)P(S5):d为P3开始需等待来自P1的S2,故P(S2)正确;e为P3结束后需分别通知P2与P4,故V(S3)V(S5)正确;f为P4开始需等待来自P2与P3的S4与S5,故P(S4)P(S5)正确。此项正确。
B选项 V(S2)、P(S3)V(S5)和V(S4)P(S5):d应为等待而非释放,V(S2)错误;f应为等待两个信号量而非对S4执行V,错误。
C选项 P(S2)、V(S3)P(S5)和P(S4)V(S5):e处对S5不应等待而应释放,P(S5)错误;f处对S5不应释放而应等待,V(S5)错误。
D选项 V(S2)、V(S3)P(S5)和P(S4)V(S5):同样把等待与释放颠倒,错误。
所以选择 A。
