news 2026/7/25 7:54:58

多线程循环打印123(个人题解golang版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
多线程循环打印123(个人题解golang版)

刷面筋看到这么一道手搓题,看网上题解大部分都是java的,就以我的理解用go实现了(ai好笨啊,也可能是我不会用,问的全是错的最后还得自己手搓),纯古法手搓版:

var num atomic.Int64 // num 维护输出的数字 var count int // count 打印的组数 var lock sync.Mutex // lock 并发锁,保证每次只有一个协程去拿num防止出现并发冲突 func main() { num.Store(1) group := sync.WaitGroup{} group.Add(3) // 打印 1 go func() { for count < 100 { lock.Lock() // 这里必须重新判断一下count是否还<100 // 因为在并发条件下,可能出现count==99是协程一进入循环,但此时协程三拿到锁在操作,把count更新为100 // 此时协程一就不应该打印了,但因为进入了循环又没有限制还是会打印,在某些情况下就会出现多打印一次协程1和2的情况 if count < 100 && num.CompareAndSwap(1, 2) { fmt.Println(1) } lock.Unlock() } group.Done() }() // 打印 2 go func() { for count < 100 { lock.Lock() if count < 100 && num.CompareAndSwap(2, 3) { fmt.Println(2) } lock.Unlock() } group.Done() }() // 打印 3 go func() { for count < 100 { lock.Lock() if count < 100 && num.CompareAndSwap(3, 1) { fmt.Println(3) // 到协程3,一组循环才算结束才count+1 count++ } lock.Unlock() } group.Done() }() // 阻塞等待 group.Wait() }

这里有几点我实现时踩过的坑大家可以注意一下:

  1. 一定要加锁,即使使用atomic也只是维护了一个变量的并发而非整个代码块,同时因为这里不是变量层面的并发,所以这里也可以用普通int替代,这里我num使用了atomic是为了简化代码利用它内置的CompareAndSwap方法,大家自己实现可以直接使用int
  2. 锁里面一定要再次判断count,因为在并发条件下,可能出现count==99是协程一进入循环,但此时协程三拿到锁在操作,把count更新为100,此时协程一就不应该打印了,但因为进入了循环又没有限制还是会打印,在某些情况下就会出现多打印一次协程1和2的情况
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/24 8:33:02

systemd服务管理深入实践从入门到自定义服务

本文系统讲解systemd的核心概念、服务管理、自定义Unit文件编写&#xff0c;以及常见问题排查。前言 如果你还在用service xxx start或者写init.d脚本&#xff0c;是时候全面拥抱systemd了。 systemd是现代Linux的标准初始化系统&#xff0c;管理着系统启动、服务运行、日志记录…

作者头像 李华
网站建设 2026/7/24 14:23:54

基于微信小程序的网络安全知识科普平台系统【源码文末联系】

基于微信小程序的网络安全知识科普平台系统 两个角色&#xff08;管理员&#xff0c;用户&#xff09; 效果如下&#xff1a; 登录页面用户首页面科普分类页面智能问答页面管理员首页面用户管理页面科普知识页面轮播图管理页面研究背景 在数字化浪潮席卷全球的当下&#xff0c;…

作者头像 李华
网站建设 2026/7/22 19:54:16

基于VUE的实验室使用管理系统[VUE]-计算机毕业设计源码+LW文档

摘要&#xff1a;实验室作为科研与教学的重要场所&#xff0c;其高效管理至关重要。本文阐述了一个基于VUE框架开发的实验室使用管理系统&#xff0c;详细介绍了系统的需求分析、技术选型、架构设计、功能模块设计以及实现过程。该系统实现了用户管理、实验室管理、实验室管理员…

作者头像 李华
网站建设 2026/7/22 6:32:46

【单片机毕业设计】【mcugc-mcu911】基于单片机的多功能安防系统

一、基本介绍 功能&#xff1a; 1、通过火焰传感器检测是否发生明火&#xff0c;如果发生&#xff0c;通过继电器控制水泵灭火&#xff0c;并声光报警 2、通过MQ-2检测烟雾浓度&#xff0c;如果烟雾值大于设置的最大值&#xff0c;通过继电器控制风扇通风&#xff0c;并声光报警…

作者头像 李华
网站建设 2026/7/23 19:14:24

【单片机毕业设计】【mcugc-mcu916】基于单片机的智能家居安防系统

一、基本介绍 功能&#xff1a; 1、通过MQ-2检测烟雾浓度&#xff0c;如果烟雾值大于设置的最大值&#xff0c;声光报警&#xff0c;通过GSM发送“烟雾过高”短信 2、通过DS18B20检测温度值&#xff0c;如果温度值大于设置的最大值&#xff0c;声光报警 &#xff0c;通过GSM发送…

作者头像 李华