go语言如何实现两个协程交替打印
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,这篇"go语言如何实现两个协程交替打印"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"
千家信息网最后更新 2025年01月25日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安全错误
数据库的锁怎样保障安全
云服务器通过什么访问
商城项目订单数据库设计
当前网络安全系数低
网络安全国旗下宣讲
电力网络安全等级
数据库暴露在外网安全性
TFS备份数据库
怎样开展网络安全应急演练
str数据库
用友u8订单是哪个数据库
销售云服务器话术
汕头网络安全宣传片
日常网络安全维护工作
泰科网络技术廊坊有限公司
软件开发是前端还是后端
广电网络技术考试
数据库下载文档封面
数据库主键怎么写
网站未落实网络安全防范措施
孝感哪里有软件开发方案
软件开发技术转岗
羿恒互联网科技
c 数据库 成绩管理
ip地址怎么改成服务器的
数据库的运算符
网络技术计算机等级
it软件开发与高校合作
.网络安全的基本属性是(
塔科夫服务器图片
备案 国外服务器