协程基础请参考上一章,我们接着来看下协程后面的部分,协程间通信。
共享变量方式
我们协程间通信,可以采用共享变量的方式,不过得注意数据互斥,例如: 这里有一个小栗子,我们定义一个共享变量,赋初值为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