当前位置: 首页 > news >正文

Go语言2个协程交替打印

WaitGroup + 无缓冲channel

  • waitgroup 用来控制2个协程
    • Add() 、Done()、Wait()
  • channel用来实现信号的传递和信号的打印
    • ch1: 用来记录打印的信号
    • ch2:用来实现信号的传递,实现2个协程的顺序打印
package mainimport ("fmt""sync"
)func main() {var wg sync.WaitGroup // 创建一个 WaitGroup 用于2个 goroutine 执行完成ch1 := make(chan int) // 创建一个无缓冲的整数通道 ch1ch2 := make(chan int) // 创建一个无缓冲的整数通道 ch2wg.Add(2)             // 向 WaitGroup 中添加 2 个需要等待的 goroutine// 启动第一个 goroutinego func() {defer wg.Done() // 当 goroutine 结束时,调用 Done 通知 WaitGroup 完成// 从 1 开始,每次加 2 向 ch1 发送数据for i := 1; i <= 100; i += 2 {ch1 <- i // 打印发送的奇数fmt.Println("Goroutine 1:", i)<-ch2 // 等待 ch2信号,阻塞}close(ch1) // 关闭 ch1 通道}()// 启动第二个 goroutinego func() {defer wg.Done() // 当 goroutine 结束时,调用 Done 通知 WaitGroup 完成// 从 ch1 中接收数据for i := range ch1 {// 打印接收的奇数加 1 的结果fmt.Println("Goroutine 2:", i+1)ch2 <- i // 向 ch2 发送数据}close(ch2) // 关闭 ch2 通道}()// 等待两个 goroutine 完成wg.Wait()
}

相关文章:

  • 使用Netlify进行简单部署
  • Git+Jenkins-Docker搭建企业级CI/CD平台
  • 基于OpenManus的跨平台部署方案及远程访问安全机制
  • CSS 第四天 复合选择器、CSS特性、背景属性、显示模式
  • P6 QT项目----汽车仪表盘(6.2)
  • 原型模式Prototype Pattern
  • 第二十九场 蓝桥算法赛
  • 华为OD机试_2025 B卷_运维日志排序(Python,100分)(附详细解题思路)
  • 136. 只出现一次的数字
  • CSP 2024 入门级第一轮(88.5)
  • NodeJS中老生代和新生代和垃圾回收机制
  • Luckfox Pico Pi RV1106学习<3>:支持IMX415摄像头
  • 深度学习:PyTorch自动微分模块
  • 修改了xml布局代码,页面使用了databinding,此时不开启kapt也可以吗
  • Yolo11改进策略:Block改进|MKP,多尺度卷积核级联结构,增强感受野适应性|即插即用|AAAI 2025
  • c++26新功能—契约与概念
  • 华为OD-2024年E卷-英文输入法[100分] -- python
  • 深入实践Caffeine+Redis两级缓存架构:从原理到高可用设计
  • ubuntu 22.04 安装部署elk(elasticsearch/logstash/kibana) 7.10.0详细教程
  • 【JVM】- 内存模式
  • 企业网站内容是什么/seo关键词优化排名公司
  • 女生做网站后期维护工作好吗/品牌seo是什么意思
  • 网站开发的目的及意义/seo快排优化
  • 桂林疫情最新消息确诊19例/石家庄百度快照优化
  • 简述网站推广方式/南宁百度seo排名价格
  • 城乡建设部门户网站/广告投放平台排名