【go从零单排】Atomic Counters原子计数
🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。
📗概念
在 Go 语言中,原子计数器(Atomic Counters)是一种用于在并发环境中安全地进行计数的机制。
Go 提供了 sync/atomic 包来支持原子操作,这些操作可以确保在多个 goroutine 同时访问同一变量时,数据的一致性和安全性。
💻代码
package main
//sync/atomic 提供了原子操作的支持,sync/atomic 提供了原子操作的支持
import (
"fmt"
"sync"
"sync/atomic"
)
func main() {
var ops atomic.Uint64 // 声明一个原子无符号整型,用于计数
var wg sync.WaitGroup // 声明一个 WaitGroup,用于等待所有 goroutine 完成
for i := 0; i < 50; i++ { // 启动 50 个 goroutine
wg.Add(1) // 增加 WaitGroup 的计数
go func() {
for c := 0; c < 1000; c++ { // 每个 goroutine 执行 1000 次计数
ops.Add(1) // 原子地增加计数
}
wg.Done() // 当前 goroutine 完成时减少 WaitGroup 的计数
}()
}
wg.Wait() // 等待所有 goroutine 完成
fmt.Println("ops:", ops.Load()) // 打印最终计数
}
🔍理解
- 并发安全:使用 sync/atomic 包中的 Uint64 类型,确保对计数的操作是原子的,避免数据竞争。
- WaitGroup:使用 sync.WaitGroup 来等待所有 goroutine 完成,确保在输出结果之前所有的计数操作都已完成。
- 原子计数器 是处理并发计数的安全方法,避免了数据竞争。
- 使用 sync/atomic 包中的原子操作,可以轻松实现高效的并发计数。
- 原子操作在性能上通常优于使用互斥锁,因为它们避免了上下文切换和锁的开销。
💪无人扶我青云志,我自踏雪至山巅。
原文地址:https://blog.csdn.net/qq_42476938/article/details/143687873
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!