在Go语言中,原子函数是一组用于进行原子操作的函数。原子操作是指在并发环境中,多个goroutine同时访问和修改共享数据时,保证数据一致性和线程安全性的操作。
Go语言提供了sync/atomic
包,其中包含了一组原子函数,用于对基本类型(如int
、uint32
、bool
等)和指针类型进行原子操作。
下面是一些常用的原子函数:
Load*
函数:用于原子地加载变量的值。
func Load*() (value, success)
成功标志为true,表示操作成功;否则为false,表示失败。
2. Store*
函数:用于原子地存储一个新值。
func Store*() (oldValue, success)
成功标志为true,表示操作成功;否则为false,表示失败。
3. Add*
函数:用于原子地将一个值与当前值相加。
func Add*() (newValue, success)
成功标志为true,表示操作成功;否则为false,表示失败。
4. Sub*
函数:用于原子地将当前值与一个值相减。
func Sub*() (newValue, success)
成功标志为true,表示操作成功;否则为false,表示失败。
5. Swap*
函数:用于原子地交换当前值和一个新值。
func Swap*() (oldValue, newValue, success)
成功标志为true,表示操作成功;否则为false,表示失败。
6. CompareAndSwap*
函数:用于比较当前值和一个旧值,如果相等,则存储一个新值。
func CompareAndSwap*() (oldValue, newValue, success)
成功标志为true,表示操作成功;否则为false,表示失败。
7. CompareAndSwapPointer
函数:用于比较当前指针和一个旧指针,如果相等,则存储一个新指针。
GetPointer
函数:用于原子地获取指针的值。PutPointer
函数:用于原子地存储一个新指针。CAS*
函数:用于比较并交换当前值和一个新值,同时进行原子操作。类似于CAS(Compare and Swap)操作。AtomicAdd*
函数:用于原子地执行加法操作并返回结果。不提供失败标志。AtomicSub*
函数:用于原子地执行减法操作并返回结果。不提供失败标志。AtomicAnd*
函数:用于原子地执行位与操作并返回结果。不提供失败标志。AtomicOr*
函数:用于原子地执行位或操作并返回结果。不提供失败标志。AtomicXor*
函数:用于原子地执行位异或操作并返回结果。不提供失败标志。LoadPointer
函数:用于原子地加载指针的值。与GetPointer类似但不常见于标准库中。