📌  相关文章
📜  Golang 中的 atomic.AddUint32()函数示例(1)

📅  最后修改于: 2023-12-03 14:41:33.598000             🧑  作者: Mango

Golang 中的 atomic.AddUint32()函数示例

在 Golang 中,我们通常使用 sync/atomic 包中的函数来进行原子操作,以保证程序并发安全。

atomic.AddUint32() 函数用于对 uint32 型变量进行原子加操作。它的函数签名如下:

func AddUint32(addr *uint32, delta uint32) (new uint32)

其中,第一个参数 addr 是一个指向 uint32 型变量的指针,delta 是要加上的值。函数返回原子加后新的值。

以下代码展示了如何使用 atomic.AddUint32() 函数:

package main

import (
	"fmt"
	"sync"
	"sync/atomic"
)

var counter uint32

func main() {
	var wg sync.WaitGroup
	for i := 0; i < 100; i++ {
		wg.Add(1)
		go func() {
			defer wg.Done()
			atomic.AddUint32(&counter, 1)
		}()
	}
	wg.Wait()
	fmt.Println("counter:", counter)
}

在以上代码中,我们使用 sync.WaitGroup 来等待所有协程执行完毕,然后输出变量 counter 的值。

可以看到,在 for 循环中启动了 100 个协程,每个协程都对变量 counter 进行原子加 1 操作,最终输出的变量 counter 的值应当是 100。

这里使用了 atomic.AddUint32() 函数来确保对变量 counter 的原子加操作。

需要注意的是,atomic.AddUint32() 函数仅适用于 uint32 型变量,如果要对其他数据类型进行原子操作,可以使用其他原子操作函数,例如 atomic.AddInt64()atomic.AddUint64() 等等。