news 2026/8/21 4:17:46

多线程循环打印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/8/21 22:16:25

61、PHP基础函数与操作全解析

PHP基础函数与操作全解析 1. 包含文件 在PHP中,包含其他文件最常见的方式是使用 include 关键字。以下是示例代码: <?php for($i = 10; $i >= 0; $i -= 1) {include "echo_i.php"; } ?>将上述代码保存为 include1.php ,再将下面的代码保存为 …

作者头像 李华
网站建设 2026/8/21 8:02:33

基于VUE的手机商城管理系统[VUE]-计算机毕业设计源码+LW文档

摘要&#xff1a;随着移动互联网的迅猛发展&#xff0c;手机商城业务日益繁荣&#xff0c;对高效的管理系统需求愈发迫切。本文介绍了一个基于VUE框架开发的手机商城管理系统&#xff0c;阐述了系统的需求分析、技术选型、架构设计、功能模块设计及具体实现过程。该系统实现了手…

作者头像 李华
网站建设 2026/8/21 11:15:08

Linux Shell 脚本入门实战:猜数字游戏开发(核心知识点总结)

前言作为 Linux Shell 脚本初学者&#xff0c;近期通过实战开发猜数字游戏&#xff0c;系统掌握了脚本基础核心语法&#xff0c;彻底理清了变量操作、流程控制等关键知识点。本文将结合完整的游戏脚本&#xff0c;逐一拆解学习收获&#xff0c;从基础语法到实战落地&#xff0c…

作者头像 李华
网站建设 2026/8/21 22:53:13

01Agent惊艳亮相2025 XAIR大会,重塑内容生产,现场引爆签约热潮

近日&#xff0c;备受瞩目的“2025 XAIR粤港澳大湾区人工智能与机器人产业大会”在科技创新的热潮中圆满落下帷幕。为期三天的盛会汇聚了全球顶尖的科技企业、行业领袖及专家学者&#xff0c;共同探讨AI技术的落地应用与未来趋势。作为国内多智能体领域的先行者&#xff0c;超空…

作者头像 李华
网站建设 2026/8/21 22:52:35

基于vue的家具商城 家居店活动抽奖系统_wi1h6xl5_springboot php python nodejs

目录 具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持java、ThinkPHP、Node.js、Spring…

作者头像 李华