快速 #
Go语言中的 sync/atomic
包提供了一组原子操作函数,用于在多线程或并发环境下执行对共享变量的原子操作。这些操作是原子的,不会受到其他并发操作的干扰,从而避免了竞态条件和数据竞争问题。sync/atomic
包通常用于同步和管理共享资源,以确保线程安全。
Load 操作 读取 #
-
atomic.LoadInt32(&addr int32) int32
- 原子性地读取一个
int32
值。
- 原子性地读取一个
-
atomic.LoadInt64(&addr int64) int64
- 原子性地读取一个
int64
值。
- 原子性地读取一个
-
atomic.LoadUint32(&addr uint32) uint32
- 原子性地读取一个
uint32
值。
- 原子性地读取一个
-
atomic.LoadUint64(&addr uint64) uint64
- 原子性地读取一个
uint64
值。
- 原子性地读取一个
-
atomic.LoadUintptr(&addr uintptr) uintptr
- 原子性地读取一个
uintptr
值。
- 原子性地读取一个
-
atomic.LoadPointer(&addr unsafe.Pointer) unsafe.Pointer
- 原子性地读取一个指针值。
Store 操作 设置 #
-
atomic.StoreInt32(&addr int32, val int32)
- 原子性地设置一个
int32
值。
- 原子性地设置一个
-
atomic.StoreInt64(&addr int64, val int64)
- 原子性地设置一个
int64
值。
- 原子性地设置一个
-
atomic.StoreUint32(&addr uint32, val uint32)
- 原子性地设置一个
uint32
值。
- 原子性地设置一个
-
atomic.StoreUint64(&addr uint64, val uint64)
- 原子性地设置一个
uint64
值。
- 原子性地设置一个
-
atomic.StoreUintptr(&addr uintptr, val uintptr)
- 原子性地设置一个
uintptr
值。
- 原子性地设置一个
-
atomic.StorePointer(&addr unsafe.Pointer, val unsafe.Pointer)
- 原子性地设置一个指针值。
Add 操作 添加 #
-
atomic.AddInt32(&addr int32, delta int32) int32
- 原子性地将
int32
值增加delta
。
- 原子性地将
-
atomic.AddInt64(&addr int64, delta int64) int64
- 原子性地将
int64
值增加delta
。
- 原子性地将
-
atomic.AddUint32(&addr uint32, delta uint32) uint32
- 原子性地将
uint32
值增加delta
。
- 原子性地将
-
atomic.AddUint64(&addr uint64, delta uint64) uint64
- 原子性地将
uint64
值增加delta
。
- 原子性地将
Compare and Swap 操作 比较加设置 #
-
atomic.CompareAndSwapInt32(&addr int32, old int32, new int32) bool
- 如果
addr
的值为old
,则将其设置为new
,返回true
;否则返回false
。
- 如果
-
atomic.CompareAndSwapInt64(&addr int64, old int64, new int64) bool
- 类似于
int32
版本,但用于int64
。
- 类似于
-
atomic.CompareAndSwapUint32(&addr uint32, old uint32, new uint32) bool
- 类似于
int32
版本,但用于uint32
。
- 类似于
-
atomic.CompareAndSwapUint64(&addr uint64, old uint64, new uint64) bool
- 类似于
int32
版本,但用于uint64
。
- 类似于
-
atomic.CompareAndSwapPointer(&addr unsafe.Pointer, old unsafe.Pointer, new unsafe.Pointer) bool
- 类似于
int32
版本,但用于指针。
- 类似于
Swap 操作 设置 #
-
atomic.SwapInt32(&addr int32, new int32) int32
- 原子性地将
addr
设置为new
,返回旧值。
- 原子性地将
-
atomic.SwapInt64(&addr int64, new int64) int64
- 类似于
int32
版本,但用于int64
。
- 类似于
-
atomic.SwapUint32(&addr uint32, new uint32) uint32
- 类似于
int32
版本,但用于uint32
。
- 类似于
-
atomic.SwapUint64(&addr uint64, new uint64) uint64
- 类似于
int32
版本,但用于uint64
。
- 类似于
-
atomic.SwapPointer(&addr unsafe.Pointer, new unsafe.Pointer) unsafe.Pointer
- 类似于
int32
版本,但用于指针。
- 类似于
详细 #
storeInt32 原子性设置值 #
atomic.StoreInt32
函数来原子性地设置一个32位整数的值。这个函数可以确保在并发操作中的可靠性,避免出现竞争条件。
func main() {
var num int32 = 10
// 原子性地设置 num 的值为 20
atomic.StoreInt32(&num, 20)
fmt.Println("设置后的数值:", num)
}
LoadInt32原子加载整数 #
sync/atomic
包中的一个函数,用于原子加载一个32位整数。这个函数用于在并发编程中的低级内存管理和同步中,以避免竞争条件。
func main() {
var num int32 = 10
// 原子加载 num 的值
value := atomic.LoadInt32(&num)
fmt.Println("数值:", value)
}