go语言如何实现两个协程交替打印
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇"go语言如何实现两个协程交替打印"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"
千家信息网最后更新 2026年11月03日go语言如何实现两个协程交替打印
这篇"go语言如何实现两个协程交替打印"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"go语言如何实现两个协程交替打印"文章吧。
方法一:使用两个channel
这里channel CA 必须要有缓冲区,否则最后会报错 fatal error: all goroutines are asleep - deadlock!
这是因为无缓冲的通道只有在有接收方能够接收值的时候才能发送成功,否则会一直处于等待发送的阶段。因为最后交替运行完后没有协程可以接收CA通道中的数据,所以会一直阻塞发生死锁
package mainimport ( "fmt" "sync")var wg sync.WaitGroupvar CA chan intvar CB chan intfunc main(){ wg = sync.WaitGroup{} CA = make(chan int,1) CB = make(chan int) wg.Add(2) go A() go B() CA<-1 wg.Wait()}func A(){ for i:=0;i<5;i++{ <-CA fmt.Println(2*i) CB<-1 } wg.Done()}func B(){ for i:=0;i<5;i++{ <-CB fmt.Println(2*i+1) CA<-1 } wg.Done()}方法二 :使用一个channel
使用无缓冲的channel,使两个协程同步,按照相同的步调执行,但因为要交替打印所以不能每次同步后都打印,要让该输出的协程输出,不该输出的协程不输出
package mainimport ( "fmt" "sync")var wg sync.WaitGroupvar CA chan intfunc main(){ wg = sync.WaitGroup{} CA = make(chan int) wg.Add(2) go A() go B() wg.Wait()}func A(){ for i:=0;i<10;i++{ CA<-1 if i%2 == 0{ fmt.Println(i) } } wg.Done()}func B(){ for i:=0;i<10;i++{ <-CA if i%2 == 1{ fmt.Println(i) } } wg.Done()}以上就是关于"go语言如何实现两个协程交替打印"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
两个
内容
输出
语言
缓冲
文章
方法
知识
篇文章
通道
同步
相同
成功
价值
只有
大部分
就是
收方
数据
时候
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网黑科技
苏州找大状互联网科技有限公司
重生之互联网科技帝国
互联网科技公司的优势
互联网科技公司税收优惠
金融科技 互联网金融
青岛互联网科技公司
互联网 卓越科技
以房互联网科技
老年人脱离互联网科技的作文
富国互联网科技创新基金
博兴的互联网电子科技公司
玖二柒互联网科技公司待遇
新华互联网科技2019
北京华百购互联网科技有限公司
互联网新科技动漫ppt素材
科技赋能视角下互联网保险发展
互联网金融科技公司的优势
互联网相关科技技术
信承诺互联网科技有限公司
互联网科技企业
南京欣网互联网络科技
广东猪兼强互联网科技有限公司
互联网科技logo
广西互联网科技公司
荆州市昕露互联网络科技有限公司
西安小鹰速贷互联网科技有限公司
科技大学互联网
互联网科技机房
网互联网络科技