问答题 在一个仓库中可以存放A和B两种产品,但要求:
(1)每次只能存入一种产品(A或B);
(2)A产品数量-B产品数量<M;
(3)B产品数量-A产品数量<N;
其中,M、N是正整数,试用P操作、V操作描述产品A与产品B的入库过程。
【正确答案】
【答案解析】产品A与产品B的入库过程如下:
Semaphore:Sa,Sb,mutex;
Sa=m-1;Sb=n-1;mutex=1;
process_A() {
While(1) {
P(Sa);
P(mutex);
A产品入库;
V(mutex);
V(Sb);
}
}
Process_B() {
While(1) {
P(Sb);
P(mutex);
B产品入库;
V(mutex);
V(Sa);
}
} [解析] 这也是一个生产/消费者类型的同步互斥问题。这里有两个生产者:生产者A放入产品A,生产者B放入产品B,但没有或不考虑消费者。根据本题所给的条件,找出生产者A、B之间的相互制约关系。
条件1:生产者A和B必须互斥地使用仓库。
条件2:若只放入A产品,而不放入B产品,则A产品最多可放M-1次便被阻塞。即表示可放入A产品数目的计数器初值为M-1,A进程每放入一个产品就应当将计数器减1,当计数器值为0时,进程A被阻塞;每当放入一个B产品,则可令A产品的计数器增1,表明A进程可以多一次放入产品的机会。
条件3:若只放入B产品,而不放入A产品,则B产品最多可放N-1次便被阻塞。即表示可放入B产品数目的计数器初值为N-1,B进程每放入一个产品就应当将计数器减1,当计数器值为0时,进程B被阻塞;每当放入一个A产品,则可令B产品的计数器增1,表明B进程可以多一次放入产品的机会。
因此,需要使用信号量mutex控制两个进程互斥访问临界资源(仓库)。使用同步信号量Sa和Sb(分别代表产品A和产品B的入库计数器)满足条件2和条件3。