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

 更新时间:2020年10月21日 13:01  点击:1898

问题描述:

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

[!--infotagslink--]

相关文章

  • js实现浏览器打印功能的示例代码

    这篇文章主要介绍了js如何实现浏览器打印功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
  • vue实现页面打印自动分页的两种方法

    这篇文章主要为大家详细介绍了vue实现页面打印自动分页的两种方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-29
  • c# 获取已安装的打印机并调用打印文件

    这篇文章主要介绍了c#如何获取已安装的打印机并调用打印文件,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2020-12-08
  • Springboot+MDC+traceId日志中打印唯一traceId

    本文主要介绍了Springboot+MDC+traceId日志中打印唯一traceId,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-17
  • C#操作excel打印的示例

    这篇文章主要介绍了C#操作excel打印的示例,帮助大家利用c#打印表格,提高办公效率,感兴趣的朋友可以了解下...2020-12-08
  • C#基本打印事件用法实例

    这篇文章主要介绍了C#基本打印事件用法,实例分析了C#中print打印及DrawString文本字符串绘制等相关技巧,需要的朋友可以参考下...2020-06-25
  • C# 实现简单打印的实例代码

    C# 实现简单打印的实例代码,需要的朋友可以参考一下...2020-06-25
  • web打印 window.print()介绍

    web打印 window.print()介绍,需要的朋友可以参考一下...2020-06-25
  • 详解c# 切片语法糖

    这篇文章主要介绍了c# 切片语法糖的相关资料,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...2020-12-08
  • C语言打印华氏-摄氏温度对照表的方法

    这篇文章主要介绍了C语言打印华氏-摄氏温度对照表的方法,涉及C语言字符串与数字操作的相关技巧,非常简单实用,需要的朋友可以参考下...2020-04-25
  • C#打印PDF文档的10种方法(小结)

    这篇文章主要介绍了C#打印PDF文档的10种方法(小结),可分多种情况来进行,如设置静默打印、指定打印页码范围和打印纸张大小、双面打印、黑白打印等等,一共分成10种等,感兴趣的可以了解一下...2020-06-25
  • asp.net css控制打印功能方法实例

    这篇文章介绍了asp.net css控制打印功能方法实例,有需要的可以参考一下...2021-09-22
  • C#打印绘图的实现方法

    这篇文章主要介绍了C#打印绘图的实现方法,涉及C#针对图片的绘制与打印相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • tensorflow实现对张量数据的切片操作方式

    今天小编就为大家分享一篇tensorflow实现对张量数据的切片操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-22
  • ASP.NET网页打印(只打印相关内容/自写功能)

    朋友要求在前段时间完成的新闻的网站上加上一个功能,就是在每篇新闻浏览的页面, 加一个打印铵钮。让用户一点打印,能把整篇文章打印...2021-09-22
  • 从训练好的tensorflow模型中打印训练变量实例

    今天小编就为大家分享一篇从训练好的tensorflow模型中打印训练变量实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-22
  • SpringBoot打印POST请求原始入参body体方式

    这篇文章主要介绍了SpringBoot打印POST请求原始入参body体方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-12
  • Go遍历struct,map,slice的实现

    本文主要介绍了Go语言遍历结构体、切片和字典的方法,对大家的学习具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-06-13
  • vue打印功能实现的两种方法总结

    在项目中,有时需要打印页面的表格,所以下面这篇文章主要给大家介绍了关于vue打印功能实现的两种方法,以及批量打印的完整代码,需要的朋友可以参考下...2021-06-17
  • Python字符串对齐、删除字符串不需要的内容以及格式化打印字符

    这篇文章主要给大家介绍了关于Python字符串对齐、删除字符串不需要的内容以及格式化打印字符的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-25