当前位置: 首页 > 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()
}
http://www.dtcms.com/a/251254.html

相关文章:

  • 使用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】- 内存模式
  • 如何在Windows上使用qemu安装ubuntu24.04服务器?
  • 【Elasticsearch】文档(二):更新
  • 变幻莫测:CoreData 中 Transformable 类型面面俱到(四)
  • Matlab数字信号处理——基于GUI的ECG信号处理平台设计与实现
  • 解决docker下的Linux系统调用GPU失败
  • STM32 HAL库学习 RNG篇
  • 国产操作系统-银河麒麟本地化部署Ollama国产开源的AI大模型Qwen3
  • 华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio平台与Cherry Studio搭建知识库问答助手
  • 【运维系列】【ubuntu22.04】安装Docker
  • Matlab | matlab中100个常用函数全面解析