问题 多项选择题

有一个仓库,可以存放A和B两种产品,但要求:
(1)每次只能存入一种产品(A或B);
(2)-N<A产品数量-B产品数量<M。
其中,N和M是正整数。试用P、V操作描述产品A与B的入库过程。

答案

参考答案:semaphore mutex=A, Sa=M-A, Sb=N-A;
main()
{
Cobegin
A产品入库进程
{i=0;
while (A)
{
P(Sa);
P(mutex);
A产品入库
V(mutex);
V(sb);
}
}
B产品入库进程
{j=0;
while(A)
{
P(sb);
P(mutex);
B产品入库
V(mutex);
V(Sa);
}
}
Coend
}

解析: 本问题存在以下同步和互斥关系:(1)两个产品入库进程不能同时入库,每次只能存入一种产品,因此,仓库的入口是一个临界资源,两种产品的入库进程之间需要互斥。设互斥信号量mutex,初值为1。
(2)两种产品的数量需满足的关系式-N<A产品数量-B产品数量<M,要求两个产品入库进程之间需要同步:A产品数量-B产品数量<M,当A产品数量-B产品数量>=M时A产品入库进程序等待,当B产品数量-A产品数量>=N时B产品入库进程序等待,因此,设两个信号量Sa、Sb,Sa表示目前仓库中可再存放的A产品的数量,Sb表示目前仓库中可再存放的B产品的数量,初始状态下A和B产品数均为0,因此,可存放A产品的最大数量为M-1,可存放B产品的最大数量为N-1,所以初值分别为M-1、N-1。

选择题
单项选择题