您现在的位置是:首页 > 编程 > 

Go程序例子(4):原子计数器

2025-07-29 10:49:00
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组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1249911.html

相关标签:无
上传时间: 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分钟前 发表
"