协程基础请参考上一章,我们接着来看下协程后面的部分,协程间通信。



共享变量方式


我们协程间通信,可以采用共享变量的方式,不过得注意数据互斥,例如: 这里有一个小栗子,我们定义一个共享变量,赋初值为0,我们开启50个协程,每个协程对该值 +1,我们来看看具体效果。


我们执行程序后数据如下


result


sync.Mutex


我们再次执行程序,数据如下


我们可以将上述加锁的关系简单理解为


go syncsync.RWMutex



管道方式

gochan


初探chan

makeint


go
<-x


ch

对于不带缓存的管道,我们在未写入之前进行读取的话,会发生等待,例如如下例子。


执行结果

sync.WaitGroup



无缓冲chan 和 有缓冲chan

chanmake(chan int)make(chan int,0)makesizechan
chanchansizechanlenchancapchan


我们执行代码后,可知

chan



小案例

我们可以用管道来模拟一下生产者和消费者模型,例如,我们将模型规划为

demo



我们执行程序结果为



总结


chanmakechanlencapclose