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。