生产者消费者问题

关于生产者和消费者的问题
生产者:顾名思义,生产产品的人。可以想象为工厂。
消费者: 顾名思义,消费产品的人。就像我们去买东西的时候的身份。接下来的用语可能跟一般的描述不同,目的是为了更好的理解。

   在生产者消费者问题中,要设置两个信号量,一个是流水线,一个是产品。
   为什么要设置两个信号量?一个不行?
   在这个问题中,重点是对于生产者来说,他关心两件事:
   1。流水线是否空闲。流水线不空闲代表他没地方放产品了,不能继续生产产品了,只能等流水线空出来。流水线空闲则代表他要加快进度生产产品了。
   2。流水线上的产品是否已经被拿走。产品没拿走时,同样不能继续生产产品,这时候也只能等产品被拿走。产品被拿走了,那么他也要加快进度生产产品了。
   同样的。对于消费者来说,他也关心两件事。
   1。流水线上是否空闲。空闲的话,他就要催生产者加快进度生产。不空闲代表有产品,他应该拿走。
   2。流水线上是否有产品。没有产品他就应该催生产者生产。有产品他就应该把产品拿走。

这里为什么分得那么细呢?这里可能会出现,流水线上有产品,但是没被拿走的情况。(假设流水线上只有一个产品?这种情况下流水线跟产品的关系不是绑定的吗? 对于这种情况下确实只需要设置一个信号量)对于一个流水线上能容纳多个产品的情况下,设置两个信号量是必须的。

   接下来分两类情况讨论在这里用A代表流水线,B代表产品。
   
   对于生产者来说。他要看流水线是不是空闲。要看产品是否被拿走。流水线空闲,他就要生产产品。有产品没被拿走,要提醒消费者拿走。
   自然语言描述:
   ①生产产品
   ②判断流水线是否为空  P(A)p操作在这里的作用是判断流水线是否为空,不空就等,空就把产品放上流水线(对应③)。他消耗了流水线这个资源,因此用p操作。
   ③把产品放上流水线。把产品放在流水线,流水线上增加了产品,所以用V(B)。(对应④)
   ④V(B)。
   ⑤重复上述过程。
  
    同理。对于消费者来说。他要看流水线是不是空闲。要看有没有产品。流水线空闲,他就要提醒生产者生产产品,有产品他要拿走。
   自然语言描述:
   ①判断有没有产品  P(B)p操作在这里的作用是判断是否有产品,没有就等,有就把产品拿走(对应二)。他消耗了产品这个资源,因此用p操作。
   ②从流水线上拿下产品。
   ③流水线增加。他拿走了产品。流水线对应位置空闲。用V操作V(A)。
   ④消耗产品。
   ⑤重复上述过程。

上述过程中的③④能不能对换位置?个人理解可以。如果不可以的话,可能是因为防止出现,你明明消耗了产品,流水线却没有空闲出来的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值