Golang atomic.CompareAndSwapUint32()函数及示例

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。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程