Golang atomic.SwapInt32()函数及示例
在Go语言中,atomic包提供了更低级别的原子存储器,这对于实现同步算法很有帮助。 在Go语言中,swapInt32()函数用于原子转换新值到addr并返回先前的addr值。这个函数在atomic包中定义。 在这里,您需要导入”sync/atomic”包以使用这些函数。
语法:
func SwapInt32(addr *int32, new int32) (old int32)
在这里,addr表示地址。new是新的int32值,old是旧的int32值。
注意:(*int32)是指向int32值的指针。但是,int32包含所有带符号的32位整数-2147483648到2147483647的集合。
返回值:它将新int32值存储到addr中并返回旧的addr值。
示例1:
//演示使用SwapInt32函数的程序
//包括主要包
package main
//导入fmt和sync/atomic
import (
"fmt"
"sync/atomic"
)
//主要功能
func main() {
//对int32赋值
var x int32 = 5435435
//使用SwapInt32方法
//使用其参数
var old_val = atomic.SwapInt32(&x, 6365654)
//打印新旧值
fmt.Println("存储新值:", x,",旧值:",old_val)
}
输出:
存储新值:6365654,旧值:5435435
示例2:
//演示使用SwapInt32函数的程序
//包括主要包
package main
//导入fmt和sync/atomic
import (
"fmt"
"sync/atomic"
)
//主要功能
func main() {
//对int32赋值
var m int32 = 1223344
var n int32 = 6122082
//使用SwapInt32方法
//使用其参数
var oldVal1 = atomic.SwapInt32(&m, 1223344)
var oldVal2 = atomic.SwapInt32(&n, 16677)
//打印输出
fmt.Println((oldVal1) == m)
fmt.Println((oldVal2) == n)
}
输出:
true
false
在这里,oldVal1等于”m”,因为要存储在*addr中的新值与旧值相同,因此返回true,但是oldVal2不等于“n”,因为旧值与新分配的值不同,因此返回false。
极客教程