当前位置: 技术文章>> go中的原子函数详细介绍与代码示例

文章标题:go中的原子函数详细介绍与代码示例
  • 文章分类: 后端
  • 10784 阅读
文章标签: go go基础

在Go语言中,原子函数是一组用于进行原子操作的函数。原子操作是指在并发环境中,多个goroutine同时访问和修改共享数据时,保证数据一致性和线程安全性的操作。

Go语言提供了sync/atomic包,其中包含了一组原子函数,用于对基本类型(如intuint32bool等)和指针类型进行原子操作。

下面是一些常用的原子函数:

  1. 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函数:用于比较当前指针和一个旧指针,如果相等,则存储一个新指针。

  1. GetPointer函数:用于原子地获取指针的值。

  2. PutPointer函数:用于原子地存储一个新指针。

  3. CAS*函数:用于比较并交换当前值和一个新值,同时进行原子操作。类似于CAS(Compare and Swap)操作。

  4. AtomicAdd*函数:用于原子地执行加法操作并返回结果。不提供失败标志。

  5. AtomicSub*函数:用于原子地执行减法操作并返回结果。不提供失败标志。

  6. AtomicAnd*函数:用于原子地执行位与操作并返回结果。不提供失败标志。

  7. AtomicOr*函数:用于原子地执行位或操作并返回结果。不提供失败标志。

  8. AtomicXor*函数:用于原子地执行位异或操作并返回结果。不提供失败标志。

  9. LoadPointer函数:用于原子地加载指针的值。与GetPointer类似但不常见于标准库中。


推荐文章