题目:有个仓库可以存放A和B两种产品,但要求:
(1)每次只能存放一种产品
(2)-N<A产品数量-B产品数量<M
其中,N和M都是正整数,使用P,V操作描述产品A与B的入库过程
分析:
本问题存在以下同步和互斥问题。
(1)两个产品入库进程不能同时进行,所以仓库的入口是一个临界资源,两种产品的入库进程需要互斥。设互斥信号量mutex,初值为1;
(2)两种产品的数量满足关系式-N<A产品数量-B产品数量<M,当A产品数量-B产品数量>=M时,A产品入库进程停止,当B产品数量-A产品数量>=n,B产品入库进程停止,
设置两个信号量Sa,Sb,Sa表示仓库中还可以存放A产品的数量,Sb表示仓库中还可以存放B产品的数量,一开始仓库中两种产品的数量都是0,所以Sa=N-1,Sb=M-1,
semaphore mutex=1,Sa=N-1,Sb=M-1;
main()
{
cobegin
A产品入库进程
{
i=0;
while(1)
{
P(Sa);
P(mutex);
A产品入库
V(mutex);
V(Sb);
}
}
B产品入库
{
j=0;
while(1)
{
P(Sb);
P(mutex);
B产品入库
V(mutex);
V(Sa);
}
}
}