快速 #
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)
}