一文搞明白golang底层原子级内存操作 的使用(sync atomic包)
package main
import (
"fmt"
"sync"
"sync/atomic"
)
func main() {
var wg sync.WaitGroup
var counter int32
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for j := 0; j < 100; j++ {
// 使用AddInt32进行原子级增加操作
atomic.AddInt32(&counter, 1)
}
}()
}
wg.Wait() // 等待所有goroutine完成
// 输出counter的最终值,应为1000
fmt.Println("Counter value:", counter)
}
这段代码使用了sync
和sync/atomic
包来创建10个goroutines,每个goroutine对共享的counter
变量进行100次自增操作。通过atomic.AddInt32
函数,确保自增操作是原子级的,即使在并发环境下,也能正确地递增计数器。最后,使用sync.WaitGroup
来等待所有goroutines完成工作,并输出计数器的最终值。
评论已关闭