news 2026/4/22 14:19:08

多线程循环打印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/4/16 12:55:15

comfyui + fluxGym角色固定工作流实战

FluxGym是什么 FluxGym 是一个专为 FLUX 模型设计的、极简化的 LoRA 训练工具。它的核心目的是让普通用户在消费级显卡&#xff08;如 12GB/16GB 显存&#xff09;上也能轻松LoRA&#xff0c;训练 AI 模型&#xff0c;无需面对复杂的参数设置&#xff0c;如果你想给 FLUX 炼制一…

作者头像 李华
网站建设 2026/4/16 13:37:44

特殊版解密神器,无限制,真好用!

APDFPR PDF解密软件 解压后&#xff0c;无需繁琐的安装步骤&#xff0c;直接点击对应图标即可打开使用。 首次使用时&#xff0c;建议先将软件界面设置为中文&#xff0c;这样操作起来会更加得心应手。 为了让大家更直观地感受它的强大功能&#xff0c;我们来做个小演示…

作者头像 李华
网站建设 2026/4/18 16:06:23

【专科生必看】查重率90%?AI痕迹99.8%?别慌!Paperzz三招教你3元搞定降重+降AIGC,导师都说“这孩子真会用工具”!

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 https://www.paperzz.cc/weighthttps://www.paperzz.cc/weight 副标题&#xff1a; 专科论文不用熬通宵&#xff01;只需上传文档→选“智能降重”或“降AIGC”→等10分钟&#xff0c;重复率从90%降到8%&am…

作者头像 李华
网站建设 2026/4/21 10:11:45

DBO-LSTM预测模型:含注释、易替换数据的优化时间序列预测模型

DBO-LSTM预测模型&#xff0c;DBO优化LSTM的时间序列预测模型&#xff0c;有注释&#xff0c;替换数据就可以运行&#xff0c;全部自己写的&#xff0c;注释为中文&#xff0c;方便修改&#xff0c;有与基础版LSTM的对比结果图与误差对比图。 很适合同学们学习与绘图 最近在研…

作者头像 李华
网站建设 2026/4/21 5:22:34

小型无人机轻量化,提升续航的几种方法

小型无人机减重并提升续航能力&#xff0c;需要从机身结构、核心部件、动力系统、负载配置、飞行策略五个核心维度系统性优化&#xff0c;结合激光雷达&#xff08;Mid360&#xff09;减重改造技术&#xff0c;还可以针对性匹配无人机的负载轻量化需求&#xff0c;具体方案如下…

作者头像 李华
网站建设 2026/4/17 20:52:48

【LLM学习】九、MCP深度解析

本期对MCP进行深入解析&#xff0c;MCP的最小应用回顾往期内容&#xff1a; 【LLM学习】【Ollama】四、MCP【LLM学习】【Ollama】五、MCP进阶 一、MCP 是什么&#xff1f;—— 从行业痛点看协议价值​ 在深入技术细节前&#xff0c;我们先明确 MCP 的核心定位&#xff1a;MC…

作者头像 李华