📅  最后修改于: 2023-12-03 14:41:33.598000             🧑  作者: Mango
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()
等等。