灰白兔集市——PV问题新解2

我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛

image.png

灰白兔集市分配——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)};
}
}`

从本题的解法可以看出,当有比较复杂条件出现时,可以把复杂条件分解成一组简单条件,这样就能很容易地写出对应的程序流程了。

posted @ 2023-01-27 21:43  Luciferpluto  阅读(0)  评论(0)    收藏  举报  来源