主页 > 知识库 > golang 两个go程轮流打印一个切片的实现

golang 两个go程轮流打印一个切片的实现

热门标签:江苏呼叫中心外呼系统有效果吗 杭州人工智能电销机器人费用 谷歌美发店地图标注 赤峰电销 地图区域图标注后导出 400开头电话怎样申请 利用地图标注位置 贵州电话智能外呼系统 官渡电销外呼管理系统怎么收费

问题描述:

两个 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程轮流打印一个切片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • 使用golang实现在屏幕上打印进度条的操作
  • Golang 之协程的用法讲解
  • go 协程返回值处理操作
  • 浅谈golang for 循环中使用协程的问题
  • 浅谈go 协程的使用陷阱
  • go获取协程(goroutine)号的实例
  • Go使用协程交替打印字符

标签:保定 泰安 黔西 松原 河池 鹰潭 宜春 武汉

巨人网络通讯声明:本文标题《golang 两个go程轮流打印一个切片的实现》,本文关键词  golang,两个,程轮流,程,轮流,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《golang 两个go程轮流打印一个切片的实现》相关的同类信息!
  • 本页收集关于golang 两个go程轮流打印一个切片的实现的相关信息资讯供网民参考!
  • 推荐文章