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

go语言:两协程并发交替打印数字和字母(代码逐行注释)

要求:

  • 并发两协程交替打印数字和字母。
  • 一个协程打印数字,一个协程打印字母。

输出:

  • 12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728

思路:

  • 两个 channel 控制两个协程进行交替打印。
  • sync.WaitGroup 控制主协程等待子协程完成。

完整代码:

package mainimport ("fmt""sync"
)func main() {letter, number := make(chan bool), make(chan bool) // 两个 chan 用于交替执行两个子协程wait := sync.WaitGroup{}                           // 设置计数器,用于控制主协程堵塞等待子协程执行go func() {i := 1for {select {case <-number: // 堵塞,等待number有值后向下执行fmt.Print(i) // 打印两个连续的数字i++fmt.Print(i)i++letter <- true // 赋值后,打印字母协程收到后继续执行}}}()wait.Add(1) // 计数器加1go func() {i := 'A'for {select {case <-letter: // 堵塞,等待letter有值向下执行if i >= 'Z' { // 子协程结束wait.Done() // 计数器设置为0,退出主线程return}fmt.Print(string(i)) // 打印两个连续的字母i++fmt.Print(string(i))i++number <- true // 赋值后,打印数字协程收到后继续执行}}}()fmt.Println("程序先执行此句输出。")number <- true // 赋值后,打印数字协程收到后继续执行wait.Wait()    // 堵塞主协程,直到计数器为0fmt.Println("\n程序最后执行此句输出。")
}
http://www.lryc.cn/news/380680.html

相关文章:

  • TWM论文阅读笔记
  • 探索ChatTTS项目:高效的文字转语音解决方案
  • [Django学习]Q对象实现多字段模糊搜索
  • transdreamer 论文阅读笔记
  • AIGC技术的发展现状与未来趋势探讨
  • Postman Postman接口测试工具使用简介
  • Java开发笔记Ⅱ(Jsoup爬虫)
  • 一五三、MAC 安装MongoDB可视化工具连接
  • ULTRAINTERACT 数据集与 EURUS 模型:推动开源大型语言模型在推理领域的新进展
  • 【leetcode刷题】面试经典150题 , 27. 移除元素
  • 红队内网攻防渗透:内网渗透之内网对抗:横向移动篇PTH哈希PTT票据PTK密匙Kerberoast攻击点TGTNTLM爆破
  • springBoot不同module之间互相依赖
  • [modern c++] 类型萃取 type_traits
  • 函数模板和类模板的区别
  • ChatGPT 提示词技巧一本速通
  • 【windows解压】解压文件名乱码
  • 使用Flink CDC实时监控MySQL数据库变更
  • 学生课程信息管理系统
  • 如何看待鸿蒙HarmonyOS?
  • 【论文复现|智能算法改进】一种基于多策略改进的鲸鱼算法
  • yarn安装配置及使用教程
  • 有那么点道理。
  • 蔚蓝资源包和数据分析
  • MySQL----利用Mycat配置读写分离
  • 【科学计算与可视化】2. pandas 基础
  • 医学记录 --- 腋下异味
  • 【Linux】进程间通信_1
  • Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.6 在kernel 中实现系统复位和系统关机驱动
  • 如何在Java中进行单元测试?
  • 代码随想录训练营Day32