下表是两个同步进程的模拟执行,生产者将物品放入共享缓冲区以供消费者使用,缓冲区可以放2件物品,使用两个信号量,并置初值为S1=2,S=0。现已知操作情况,请填写信号量值并说明操作结果(正常、阻塞或唤醒)(提示:缓冲区不满,不许放物品;缓冲区为空,不许取物品)。
操作情况 信号量值 操作结果说明
事件 P1(生产者) P2(消费者) S1 S2  
0 2 0 初始化
1 P(S2)      
2 P(S1)      
3 V(S2)      
4 P(S1)      
5 V(S1)      
6 V(S2)      
7 P(S1)      
8 V(S2)      
9 P(S1)      
 
【正确答案】
操作情况 信号量值 操作结果说明
事件 P1(生产者) P2(消费者) S1 S2  
0 2 0 初始化
1 P(S2) 2 -1 P2阻塞
2 P(S1) 1 -1 P1正常,P2阻塞
3 V(S2) 1 0 P1正常,P2被唤醒
4 P(S1) 0 0 P1正常
5 V(S1) 1 0 P1、P2均正常
6 V(S2) 1 1 P1、P2均正常
7 P(S1) O 1 P1、P2均正常
8 V(S2) 0 2 P1、P2均正常
9 P(S1)   -1 2 P1阻塞,P2正常
【答案解析】 P操作:将信号量S减去1,若结果小于0,则把调用P(S)的进程置成等待信号量S的状态。V操作:信号量S加上1,若结果不大于0,则释放一个等待信号量S的进程。