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。