go语言如何实现两个协程交替打印
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇"go语言如何实现两个协程交替打印"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"
千家信息网最后更新 2025年11月13日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安全错误
数据库的锁怎样保障安全
计算机网络技术a类地址
校园网络安全答题活动总结
比较厉害的网络技术
网络安全法约束范围
眉山管理软件开发
如何履行网络安全的义务
长宁区品质软件开发制造价格
大兴区品质软件开发设计价格走势
移动云信互联网科技有限公司
新洲计算机软件开发地址
华为服务器开机快捷键
创建oracle数据库表语句
广东公安网络安全行动
icdd数据库
国内的sql数据库网站空间
数据库提供的语言分成哪三类
怀柔区网络技术信息采购
中国网络安全对抗
如何更新数据库表中的数据
餐饮数据库管理系统设计存储过程
桌面cpu 服务器cpu
orlace数据库安装
网络安全等级保护对象包含
办公软件开发费用账务处理
证券软件开发排行
联通公司网络安全宣传活动方案
服务器管理芯片家族
魔兽世界服务器名称
服务器唯一id
数据管理服务器软件价格