常春岛资源网 Design By www.syssdc.com
问题描述:
两个 go 程轮流打印一个切片。
Golang 实现:
使用两个 channel,只用来判断
package main import ( "fmt" "sync" ) // 两个 go 程轮流打印一个切片 func main() { ch1 := make(chan bool, 1) ch2 := make(chan bool, 1) ch1 <- true nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9} var i int var wg sync.WaitGroup wg.Add(2) go func() { for ; i < len(nums) && <-ch1; i++ { fmt.Println(nums[i]) ch2 <- true } wg.Done() }() go func() { for ; <-ch2 && i < len(nums); i++ { fmt.Println(nums[i]) ch1 <- true } wg.Done() }() wg.Wait() }
注意
要理清两个子 go 程的判断条件,要注意是先判断 i 的大小还是先判断管道是否有值。
稍有不慎就会发生死锁哦。
使用两个 channel,用来传值
package main import ( "fmt" "sync" ) // 两个 go 程轮流打印一个切片 func main() { ch1 := make(chan int, 1) ch2 := make(chan int, 1) nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9} ch1 <- nums[0] i := 1 numsLen := len(nums) var wg sync.WaitGroup wg.Add(2) go func() { for ; i < numsLen; i++ { val := <-ch1 fmt.Println(val) ch2 <- i+1 } wg.Done() }() go func() { for ; i < numsLen; i++ { val := <- ch2 fmt.Println(val) ch1 <- i+1 } wg.Done() }() wg.Wait() }
到此这篇关于golang 两个go程轮流打印一个切片的实现的文章就介绍到这了,更多相关golang go程轮流打印一个切片内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
常春岛资源网 Design By www.syssdc.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
常春岛资源网 Design By www.syssdc.com
暂无评论...
更新日志
2024年06月03日
2024年06月03日
- 罗斯特洛波维奇、布里顿《舒伯特-阿佩乔尼奏鸣曲》1995[WAV+CUE]
- 群星《超高品质流行女声大碟 静听女人心 2CD》[WAV+CUE][1.3GB]
- BEYOND《无悔这一生 2023》 [WAV+CUE][690MB]
- 群星《30首最发烧经典老歌 情牵男人心 2CD》[WAV+CUE][1.4GB]
- 群星《不老的情歌-至尊版2CD》WAV分轨
- 岁月留声机群星《七十年代人金曲回顾》(黑胶)2CD[WAV分轨]
- 群星-世纪难忘金曲(迪安唱片)5CD[WAV]
- HenrietteFaure-DebussyEstampesPrludes,LivreI(MonoVersion)[FLAC]
- 吕方1992-弯弯十八首[香港][WAV+CUE]
- 经典歌曲珍藏专辑《民歌30年·真情依旧》3CD[WAV+CUE]
- 群星《时尚流行发烧极品 非同凡响 第一辑 2CD》[WAV/分轨][1.3GB]
- 陈曦《多年以后》HQⅡ头版限量编号[WAV+CUE][520MB]
- 孙露《用情 HQⅡ 2023》[WAV+CUE][380MB]
- 电影原声《速度与激情9电影原声大碟》2021[WAV+CUE]
- 【瑞鸣音乐】群星《伶歌》[XRCD2][WAV+CUE]