Go語言的原子操作(atomic operations)是一種在多線程環境下保證數據一致性的方法。原子操作是不可中斷的,這意味著在執行過程中不會被其他線程干擾。Go語言的sync/atomic
包提供了一系列原子操作函數,可以用于處理整數類型的數據。
以下是一些常見的原子操作及其應用場景:
atomic.LoadInt32
和 atomic.LoadInt64
用于加載原子變量的值。var counter int32
atomic.StoreInt32(&counter, 42)
value := atomic.LoadInt32(&counter)
atomic.StoreInt32
和 atomic.StoreInt64
用于存儲原子變量的值。var counter int32
atomic.StoreInt32(&counter, 42)
atomic.AddInt32
和 atomic.AddInt64
用于原子地將一個值加到原子變量上。var counter int32
atomic.AddInt32(&counter, 42)
atomic.CompareAndSwapInt32
和 atomic.CompareAndSwapInt64
用于原子地比較并交換原子變量的值。var counter int32 = 42
if atomic.CompareAndSwapInt32(&counter, 42, 100) {
fmt.Println("Counter was 42, now it's 100")
} else {
fmt.Println("Counter was not 42")
}
atomic.SwapInt32
和 atomic.SwapInt64
用于原子地交換原子變量的值。var counter int32 = 42
atomic.SwapInt32(&counter, 100)
原子操作在以下場景中非常有用:
需要注意的是,原子操作僅適用于簡單的數據類型(如整數),對于復雜的數據結構,可能需要使用其他同步原語(如互斥鎖、讀寫鎖等)。