Go程序例子(4):原子计数器
Go程序例子(4):原子计数器
Go 中管理状态的主要机制是通过通道进行通信。例如,我们在 worker 池中就看到了这一点。不过,还有一些其他选项来管理状态。在这里,我们将介绍如何使用 sync/atomic 包来管理多个 goroutines 访问的原子计数器。代码语言:go复制package main
import (
"fmt"
"sync
Go程序例子(4):原子计数器
Go 中管理状态的主要机制是通过通道进行通信。例如,我们在 worker 池中就看到了这一点。不过,还有一些其他选项来管理状态。在这里,我们将介绍如何使用 sync/atomic 包来管理多个 goroutines 访问的原子计数器。
代码语言:go复制package main
import (
"fmt"
"sync"
"sync/atomic"
)
func main() {
// 我们将使用原子整数类型来表示我们的(始终为正的)计数器。
var ops atomic.Uint64
// WaitGroup 将帮助我们等待所有 goroutines 完成它们的工作。
var wg sync.WaitGroup
// 我们将启动 50 个 goroutines,每个 goroutine 都会将计数器递增 1000 次。
for i := 0; i < 50; i++ {
wg.Add(1)
go func() {
for c := 0; c < 1000; c++ {
// 为了原子性地递增计数器,我们使用 Add。
ops.Add(1)
}
wg.Done()
}()
}
// 等待所有 goroutines 完成。
wg.Wait()
fmt.Println("ops:", ops.Load())
}
在这里,没有 goroutines 在写入 ops,但通过使用 Load,即使其他 goroutines 正在(原子地)更新它,读取值也是安全的。
代码语言:javascript代码运行次数:0运行复制$ go run atomic-counters.go
ops: 50000
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-27 16:43:16
推荐阅读
留言与评论(共有 8 条评论) |
本站网友 大鼻子整容 | 23分钟前 发表 |
var ops atomic.Uint64 // WaitGroup 将帮助我们等待所有 goroutines 完成它们的工作 | |
本站网友 福布斯全球富豪榜 | 14分钟前 发表 |
不过 | |
本站网友 上海一夜 | 30分钟前 发表 |
ops.Load()) }在这里 | |
本站网友 怎么样减肥最快最有效 | 5分钟前 发表 |
= 0; c < 1000; c++ { // 为了原子性地递增计数器 | |
本站网友 油涨价 | 27分钟前 发表 |
不过 | |
本站网友 中山金逸国际影城 | 27分钟前 发表 |
例如 | |
本站网友 电价调整 | 1分钟前 发表 |
" |