某工厂仓库有一名保管员,该仓库可存放,z箱零件。该工厂生产车间有m名工人,只要仓库空闲,工人便将生产好的整箱零件放入仓库,并由保管员登记入库数量;该工厂销售部有k名销售员,只要仓库库存数能满足客户要求,便可提货,并由保管员登记出库数量。规定工人和销售员不能同时进入仓库,但是工人和工人、销售员和销售员可以同时进入仓库,其工作流程如图2-7所示。
假设系统中P操作表示申请一个资源,当执行P操作时,对信号量减1,若信号量S≥0,则执行P操作的进程继续执行,否则等待。系统中V操作表示释放一个资源,当执行V操作时,对信号量加1,若信号量S>0,则执行V操作的进程继续执行;若信号量S≤0,则从阻塞状态唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续。
为了利用P/V操作正确地协调工人和销售员进程之间的工作,设置了信号量S1、S2和S3,它们的初值分别为n、0和1。图2-7中的a和b应分别填写 (16) ,e和f应分别填写 (17) ,c、d、g和h应分别填写 (18) 。
A.P(S1)、V(s1)、P(S2)、V(S2)
B.P(S1)、V(S1)、P(S3)、V(S3)
C.P(S2)、V(S2)、P(S3)、V(S3)
D.P(S3)、V(S3)、P(S3)、V(S3)
参考答案:D
解析:
[分析]: 从试题描述来看,在本题中,信号量S1表示仓库空闲位置个数,初值为n;S2表示仓库中零件箱数,初值为0;S3用于实现对保管员的互斥访问,初值为1。
对于工人进程,首先应执行P(S1),看仓库中是否有空闲位置,若有,则将零件送入仓库,然后执行V(S2),表明仓库中已有一箱零件,通知销售员可以提货。然后执行P(S3),看保管员是否空闲,若空闲,登记入库数,然后V(S3),使保管员处于空闲状态。
对于销售员进程,首先执行P(S2),看仓库中是否有货物,若有,可以提货,然后执行V(S1),表明已经提走一箱零件,空闲出一个位置,工人进程可以放置货物;然后执行P(S3),看保管员是否空闲,若空闲,登记出库数,然后V(S3),使保管员处于空闲状态。