通八洲科技

如何在Golang中实现并发累加器_多协程安全计算总和

日期:2025-12-25 00:00 / 作者:P粉602998670
使用 sync.Mutex 保护共享变量最直接的方式是用互斥锁确保同一时间只有一个协程能修改累加器,定义 Counter 结构体封装值和锁,Add 方法先加锁再更新,读取也建议加锁;atomic.AddInt64 更轻量高效但需 int64 类型;channel 方式适合任务分片,各协程发局部和到通道,主协程统一累加。

使用 sync.Mutex 保护共享变量

最直接的方式是用互斥锁确保同一时间只有一个协程能修改累加器。定义一个结构体封装值和锁,所有加法操作都先加锁再更新:

用 sync/atomic 实现无锁累加

当只做整数加减且平台支持时,atomic.AddInt64 更轻量高效。注意变量必须是 int64 类型(32 位系统上 int 可能非原子):

用 channel 汇总结果(适合任务分片场景)

若每个协程负责处理一部分数据,可让它们把局部和发到通道,由主协程统一累加:

使用 sync.WaitGroup 协调完成时机

无论选哪种累加方式,都要等所有协程结束才能获取最终结果。WaitGroup 是标准做法: