Golang atomic.CompareAndSwapInt32()函数及示例

Golang atomic.CompareAndSwapInt32()函数及示例

在Go语言中,atomic包提供了较低级别的原子内存,有利于实现同步算法。在Go语言中, CompareAndSwapInt32() 函数用于执行int32值的比较和交换操作。此函数在atomic包中定义。在此,您需要导入“sync/atomic”软件包以使用这些函数。

语法:

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

这里,addr表示地址,old表示从交换操作返回的旧的int32值,new是int32新值,将从旧的交换值中交换自身。

注意:(*int32)是指向int32值的指针。而int32是32位位大小的整数类型。此外,int32包含所有带符号的32位整数,范围从-2147483648到2147483647。

返回值:如果交换成功则返回true,否则返回false。

示例1:

// Golang程序示例,演示使用
// CompareAndSwapInt32函数

// 主要包括以下内容:
package main

// 导入fmt和sync/atomic
import (
    "fmt"
    "sync/atomic"
)

// 主函数
func main() {

    // 将变量值分配给int32
    var (
        i int32 = 111
    )

    // 交换
    var old_value = atomic.SwapInt32(&i;, 498)

    // 打印旧值和交换值
    fmt.Println("交换:", i,"旧值:", old_value)

    // 使用其参数调用CompareAndSwapInt32方法
    Swap := atomic.CompareAndSwapInt32(&i;, 498, 675)

    // 如果已经交换,则显示true,否则显示false
    fmt.Println(Swap)
    fmt.Println("i的值为:",i)
} 

输出:

交换:498,旧值:111
true
i的值为:675

示例2:

// Golang程序示例,演示使用
// CompareAndSwapInt32函数

// 主要包括以下内容:
package main

// 导入fmt和sync/atomic
import (
    "fmt"
    "sync/atomic"
)

// 主函数
func main() {

    // 将变量值分配给int32
    var (
        i int32 = 111
    )

    // 交换
    var old_value = atomic.SwapInt32(&i;, 498)

    // 打印旧值和交换值
    fmt.Println("交换:", i,"旧值:", old_value)

    // 调用CompareAndSwapInt32
    //方法与其参数
    Swap := atomic.CompareAndSwapInt32(&i;, 111, 675)

    // 如果已经交换,则显示true,否则显示false
    fmt.Println(Swap)
    fmt.Println("i的值为:",i)
} 

输出:

交换:498,旧值:111
false
i的值为:498

这里,在CompareAndSwapInt32方法中,旧值必须是从SwapInt32方法返回的交换值。在此处未进行交换,因此返回false。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程