问题描述
在一个仓库中可以存放A和B两种产品,要求如下:
(1)每次只能存入一种产品。
(2)A产品的数量 - B产品的数量 < M.
(3)B产品的数量 - A产品的数量 < N.
其中,M、N是正整数,试用P、V操作描述产品A与产品B的入库过程。
问题分析
1.仓库是一种临界资源,需要互斥访问;
2.产品A和产品B之间有同步关系:当A的数量-B的数量>= M时,进程A就会被阻塞;B的数量-A的数量>=N,进程B就会被阻塞。
代码
semaphore mutex = 1; //对仓库的互斥访问
semaphore A = M-1;
semaphore B = N-1;
PA(){
while(true){
准备A产品;
P(A);
P(mutex);
放入A产品;
V(mutex);
V(B); //放入一件A产品,B可以放入仓库的数目就增加一
}
}
PB(){
while(true){
准备B产品;
P(B);
P(mutex);
放入A产品;
V(mutex);
V(A);
}
}