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

Go多个协程实现顺序打印

WaitGroup + 无缓冲channel

  • waitgroup 用来生成n个协程
    • Add() 、Done()、Wait()
  • channel用来实现信号的传递从未实现同步阻塞,确保协程顺序执行
package mainimport ("fmt""sync""time"
)func main() {n := 200ch := make(chan bool) //创建一个无缓冲的channel实现同步阻塞var wg sync.WaitGroupwg.Add((n))for i := 1; i <= n; i++ {go func(n int) {defer wg.Done()                            //协程结束时减少waitgroup记数time.Sleep(time.Duration(n) * time.Second) //模拟耗时操作fmt.Println("output:", n)ch <- true //发送信号量到channel}(i)}for i := 1; i <= n; i++ {<-ch //等待信号,确保按序打印fmt.Println("按照顺序打印:", i)}wg.Wait() //等待所有的协程执行完成
}
http://www.xdnf.cn/news/14477.html

相关文章:

  • 华为OD机试_2025 B卷_运维日志排序(Python,100分)(附详细解题思路)
  • sudo apt-get install openssh-serve安装失败解决
  • 自定义Spring Boot Starter开发指南
  • JS当中怎么定义一个类
  • 【Quest开发】初始项目环境配置
  • Hive集成Paimon
  • 华为云国际版有区块链吗
  • Windows 系统中扩大 WSL2 的内存限制
  • YSYX学习记录(九)
  • 2026 AAAI 投稿要求
  • vscode-monitor-pro | 提升开发效率的利器
  • 【递归】两两交换链表中的节点(medium)
  • Oracle03-PL/SQL Developer
  • 深入解析Jersey框架及其与Spring MVC的核心差异
  • linux多线程之互斥锁
  • 影视剧学经典系列-梁祝-《吕氏春秋·应同》
  • 零基础学前端-传统前端开发(第四期-JS基础-语法,语句)
  • Git+Jenkins-Docker搭建企业级CI/CD平台
  • 电阻篇---上拉电阻的取值
  • Java 中的 JSON 转换
  • 《深度剖析:SCSS中混入(Mixin)为浏览器前缀赋能》
  • LeetCode 第78题:子集
  • android CALL 之 RIL、TELEDCOM、PHONE
  • 详细讲解BUUCTF-ciscn_2019_n_1
  • 6.11小测(html、css)
  • 【数据结构中哈希函数与哈希表】
  • 中国风系列简约淡雅通用PPT模版分享
  • 【Linux手册】进程的状态:从创建到消亡的“生命百态”
  • K8s集群平台
  • MySQL事务:从原理到实践