莫亚笔记 golang 生产者消费者模型扩展(一)

本文记录了一位自学Golang的初学者在实现生产者消费者模型过程中的思考与解决方案。主要难点包括如何确保生产者和消费者goroutine正确交互,避免自身读取写入的数据,以及Golang中的语法问题,如channel的读写判断,if语句后的channel操作,以及break和return的使用场景。最终,作者通过学习和实践,成功编写出能够动态调整生产规模以适应需求的代码。
摘要由CSDN通过智能技术生成

本人小白,自学golang,记录日常。

在学习channel后打算自己设计一个生产者消费者模型,以下是记录过程中遇见的一些难点和最后的解决方案:

    要求:

    汽车厂生产汽车交给店员,有10个经销商从店员这买汽车,店员一次只能持有固定的数量。如果店中有空位再放汽车话则通知生产者继续生产;如果店员没有汽车了,店员让经销商等一下,如果店中有汽车了再通知经销商取一下,缺货一定程度再扩建一个厂继续生产。

       在设计这串代码中总结的自己认为比较关键的点:

        1. 当生产者(汽车厂)和消费者(经销商)两个goroutine同时共用一个channel同时在读写时,如何保证写入channel的信息让另外一个goroutine读取而不是写入goroutine本身去读取?

       我思考后给出的解决方案是用延时功能在写入channel信息后加

time.Sleep(1 * time.Second)

这样让本身goroutine不会读取自己写入的数据

*********************************************************************************

对于上面这个问题是之前的想法,其实想错了,解决这个问题的本身原因是判断通道是否为空,我加延时功能只是碰巧解决了问题而并没有理解透彻,应该为当缓存充足且生产速率>=消费速率的时候,通道不为空,才能解决以上问题 。

特意回来再记录一下。 

***********************************************************

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值