Golang atomic.CompareAndSwapUint32()函数及示例
在Go语言中,原子操作(atomic)库提供了较低级别的原子内存,可用于实现同步算法。Go语言中的 CompareAndSwapUint32() 函数用于对uint32值执行比较并交换操作。此函数在原子操作库中定义。在使用这些函数之前,需要导入“sync / atomic”库。
语法:
func CompareAndSwapUint32(addr *uint32, old, new uint32) (swapped bool)
这里,addr表示地址,old表示旧的uint32值,new是将从旧值中交换出的新的uint32值。
注意:(*uint32)是指向uint32值的指针。uint32是32位位大小的整数类型。此外,int32包含了范围从0到4294967295的所有无符号32位整数。
返回值:如果交换操作成功,则返回true,否则返回false。
示例1:
// Golang程序演示使用CompareAndSwapUint32()函数
// 包含主要内容
package main
// 导入fmt和sync/atomic
import (
"fmt"
"sync/atomic"
)
// 主函数
func main() {
// 将变量值赋值给uint32类型
var (
i uint32 = 34764
)
// 调用CompareAndSwapUint32()方法
// 传入参数
Swap := atomic.CompareAndSwapUint32(&i, 34764, 67576)
// 如果交换成功则为true,否则为false
fmt.Println(Swap)
fmt.Println("i的值为:", i)
}
输出:
true
i的值为:67576
示例2:
// Golang程序演示使用CompareAndSwapUint32()函数
// 包含主要内容
package main
// 导入fmt和sync/atomic
import (
"fmt"
"sync/atomic"
)
// 主函数
func main() {
// 将变量值赋值给uint32类型
var (
i uint32 = 54325
)
// 进行交换操作
var oldvalue = atomic.SwapUint32(&i, 7687)
// 输出旧值和交换后的值
fmt.Println("交换后的值:", i, " , 原来的值:", oldvalue)
// 调用CompareAndSwapUint32()方法
// 传入参数
Swap := atomic.CompareAndSwapUint32(&i, 54325, 677876)
// 如果交换成功则为true,否则为false
fmt.Println(Swap)
fmt.Println("i的值为:", i)
}
输出:
交换后的值:7687, 原来的值:54325
false
i的值为:7687
在这里,由交换操作获取的交换值必须是旧值,因此返回false。