自学内容网 自学内容网

【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)!