灰白兔集市——PV问题新解2
我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛
灰白兔集市分配——PV问题
假设集市上有一个兔子摊位,这里有灰兔子和白兔子两种,但要求:
- 每次只能买一种兔子(灰兔子或白兔子);
- -N<(灰兔子数量一白兔子产品数量)<M。 其中,N和M是正整数。
试用P、V操作描述兔子种类灰兔子与白兔子的售卖过程。
[分析及相关知识]
本题给出的第一个条件是临界资源的访问控制,可用一个互斥信号量解决该问题。第二个条件可以分解为: 用A产品代替灰兔子、B产品代替白兔子
-N<A产品数量一B产品数量A产品数量一B产品数量<M
也就是说,A产品的数量不能比B产品的数量少N个以上,A产品的数量不能比B产品的数量多M个以上. 解;在本题中,我们可以设置两个信号量来控制A、B产品的存放数量,sa表示当前允许A产品比B产品多入库的数量,即在当前库存量和B产品不入库的情况下,还可以允许sa个A产品入库;sb表示当前允许B产品比A产品多入库的数量,即在当前库存量和A产品不入库的情况下,还可以允许sb个B产品入库。初始时,sa为M一1,sb为N一1,当往库中存放入一个A产品时,则允许存入B产品的数量也增加1;当往库中存放入一个B产品时,则允许存入A产品的数量也增加1。
产品A、B的入库过程描述如下:
` int mutex=1;/互斥信号量/
int sa=M-1;
int sb=N-1;main( ){
while(1){
//取一个产品;
if(取的是A产品){
p(sa);
p(mutex);
//将产品入库;
v(mutex);
v(sb):}
else/*取的产品是B*/
{p(sb);
p(mutex);
//将产品入库;
v(mutex);
v(pa)};
}
}`
从本题的解法可以看出,当有比较复杂条件出现时,可以把复杂条件分解成一组简单条件,这样就能很容易地写出对应的程序流程了。

浙公网安备 33010602011771号