Golang atomic.CompareAndSwapInt64() 函数及其示例

Golang atomic.CompareAndSwapInt64() 函数及其示例

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

语法:

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

其中,addr 表示地址,old 表示 int64 值,它是从交换操作返回的旧交换值,而 new 是 int64 新值,它将从旧交换值中交换自己。

注意: (*int64) 是指向 int64 值的指针。int64 是 64 位比特大小的整数类型。而 int64 包含所有带符号的 64 位整数,范围从 -9223372036854775808 到 9223372036854775807。

返回值:如果交换已经完成,则返回 true,否则返回 false。

以下示例说明了上述方法的使用:

示例 1:

// Golang 程序,演示了 CompareAndSwapInt64 函数的用法
  
// 导入 main 包
package main
  
// 导入 fmt 和 sync/atomic 包
import (
    "fmt"
    "sync/atomic"
)
  
// 主函数
func main() {
  
    // 将变量值分配给 int64 值
    var (
        i int64 = 686788787
    )
  
    // 进行交换
    var old_value = atomic.SwapInt64(&i, 56677)
  
    // 打印旧值和交换后的值
    fmt.Println("Swapped:", i, ", old value:", old_value)
  
    // 调用 CompareAndSwapInt64 方法及其参数
    Swap := atomic.CompareAndSwapInt64(&i, 56677, 908998)
  
    // 如果已交换,则返回 true,否则返回 false
    fmt.Println(Swap)
    fmt.Println("i 的值为:",i)
} 

输出:

Swapped: 56677 , old value: 686788787
true
i 的值为: 908998

示例 2:

// Golang 程序,演示了 CompareAndSwapInt64 函数的用法
  
// 导入 main 包
package main
  
// 导入 fmt 和 sync/atomic 包
import (
    "fmt"
    "sync/atomic"
)
  
// 主函数
func main() {
  
    // 将变量值分配给 int64 值
    var (
        i int64 = 686788787
    )
  
    // 进行交换
    var old_value = atomic.SwapInt64(&i, 56677)
  
    // 打印旧值和交换后的值
    fmt.Println("Swapped:", i, ", old value:", old_value)
  
    // 调用 CompareAndSwapInt64 方法及其参数
    Swap := atomic.CompareAndSwapInt64(&i, 686788787, 908998)
  
    // 如果已交换,则返回 true,否则返回 false
    fmt.Println(Swap)
    fmt.Println(i)
} 

输出:

Swapped: 56677, old value: 686788787
false
56677

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程