Go atomic包CompareAndSwapInt32/64的使用

发布时间:2023-03-18浏览次数:0

支持注册ChatGPT Plus的OneKey虚拟卡
绑定Apple Pay、Google Pay、支付宝和微信支付进行日常消费

注册和了解更多 ->

silver

atomic包的CompareAndSwapInt32/64函数可以实现原子性的读取和修改操作,函数原型如下:

func CompareAndSwapInt32(addr *int32, old, new int32) (swapped bool)
func CompareAndSwapInt64(addr *int64, old, new int64) (swapped bool)

其中,addr为操作的地址,old为期望值,new为更新值。如果addr指向的值等于old,则将其设置为new,并返回true,否则返回false。

举个例子:

package main

import (
	"fmt"
	"sync/atomic"
)

func main() {
	var value int32 = 100
	atomic.CompareAndSwapInt32(&value, 100, 200)
	fmt.Println(value) // 输出200
}

在上面的例子中,首先声明了一个int32类型的变量value,并初始化为100。然后使用CompareAndSwapInt32函数将value的值从100修改为200,因为value的值原来就是100,所以操作成功,最终输出200。

需要注意的是,使用atomic包的函数时一定要保证多个goroutine之间同时操作同一个地址,否则可能会出现数据竞争的问题。

字节笔记本扫描二维码查看更多内容