【正确答案】
A
【答案解析】[解析] S1是收银员进程的私用信号量;32是顾客进程的私用信号量。由题意可知:
每当有一个顾客进入时,允许进入的人数就是—1,所以应该是对信号量Sn的P操作,选C,即P(Sn)。
很明显,付款进程和收银员进程是一个多消费者和一个生产者的问题。开始前应该判断收银员进程是否忙。忙则挂起等待,不忙则付款。
收银员进程判断是否有人来付款,有人则让其他进程等待,没人则自己挂起等待。收银完毕,则自己允许其他进程调用。
因为Sn初值为n,而收银员只有一个同时也只能处理一个付款者。可以排除所有(17)、(18)中的P(Sn)的选项。
c a
c c
//不成立,因为S1和S2信号量没有P,V成对,即只有消费或者生产
c d
//不成立,理由同上
d a
d c//不成立,理由同上
dd//不成立,理由同上
由题目定义S1和S2的初始值为0,如果(17)选择C,即P(S2)先运行,V(S1)后运行,即当开始顾客进程中的P(S2),则S2-1=-1,则顾客进程挂起;同时收银员进程执行P(S1),则S1-1=-1,则收银员进程挂起,属于典型的死锁。