Skip to main content

goroutine atomic

原子性操作:

指的是在并发环境下不可被中断的操作。它确保在执行过程中不会被其他线程或 goroutine 打断,从而避免数据竞争和不一致的问题。

对原生类型变量,使用原子方法进行原子操作

在 Go 中,sync/atomic 包提供了一些原子操作,用于对整数、指针等进行线程安全的读写。这些操作包括:

  • atomic.AddInt32 / atomic.AddInt64: 原子地增加整数。
  • atomic.LoadInt32 / atomic.LoadInt64: 原子地读取整数。
  • atomic.StoreInt32 / atomic.StoreInt64: 原子地写入整数。
  • atomic.CompareAndSwapInt32 / atomic.CompareAndSwapInt64: 原子地比较并交换整数。

这些操作在底层是通过硬件指令实现的,保证在多线程环境下的安全性。

示例

package main

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

func main() {
var counter int32
var wg sync.WaitGroup

for i := 0; i < 100; i++ {
wg.Add(1)
go func() {
defer wg.Done()
atomic.AddInt32(&counter, 1)
}()
}

wg.Wait()
fmt.Printf("Counter: %d\n", counter)
}

在这个例子中,atomic.AddInt32 确保了对 counter 的增操作是线程安全的。