本人小白,自学golang,记录日常。
在学习channel后打算自己设计一个生产者消费者模型,以下是记录过程中遇见的一些难点和最后的解决方案:
要求:
汽车厂生产汽车交给店员,有10个经销商从店员这买汽车,店员一次只能持有固定的数量。如果店中有空位再放汽车话则通知生产者继续生产;如果店员没有汽车了,店员让经销商等一下,如果店中有汽车了再通知经销商取一下,缺货一定程度再扩建一个厂继续生产。
在设计这串代码中总结的自己认为比较关键的点:
1. 当生产者(汽车厂)和消费者(经销商)两个goroutine同时共用一个channel同时在读写时,如何保证写入channel的信息让另外一个goroutine读取而不是写入goroutine本身去读取?
我思考后给出的解决方案是用延时功能在写入channel信息后加
time.Sleep(1 * time.Second)
这样让本身goroutine不会读取自己写入的数据
*********************************************************************************
对于上面这个问题是之前的想法,其实想错了,解决这个问题的本身原因是判断通道是否为空,我加延时功能只是碰巧解决了问题而并没有理解透彻,应该为当缓存充足且生产速率>=消费速率的时候,通道不为空,才能解决以上问题 。
特意回来再记录一下。
***********************************************************