Golang atomic.SwapUintptr()函数及示例
在Go语言中,atomic包提供了较低级别的原子内存,有助于实现同步算法。Go语言中的 SwapUintptr() 函数用于原子地将新值存储到* addr中并返回先前的* addr值。该函数在原子包中定义。这里需要导入“sync/atomic”包才能使用这些函数。
语法:
func SwapUintptr(addr *uintptr, new uintptr) (old uintptr)
其中,addr表示地址。new是新的uintptr值,old是旧的uintptr值。
注意:(*uintptr)是指指向uintptr值的指针。uintptr是太大的整数类型,可以容纳任何指针的位模式。
返回值:它将新的uintptr值存储到* addr中,并返回先前的* addr值。
示例1:
//程序说明了在Golang中使用SwapUintptr函数
//包括主包
包括主要
//导入fmt和sync/atomic
导入(
"fmt"
"sync/atomic"
)
//主函数
func main() {
//将值指定为uintptr
var x uintptr = 96464646466757
//使用SwapUintptr方法
//使用它的参数
var old_val = atomic.SwapUintptr(&x,
21863567864)
//打印新旧值
fmt.Println("存储新值:",
x,",旧值:",old_val)
}
输出:
存储新值:21863567864,旧值:96464646466757
示例2:
//程序说明了在Golang中使用SwapUintptr函数
//包括主包
包括主要
//导入fmt和sync/atomic
导入(
"fmt"
"sync/atomic"
)
//主函数
func main() {
//将值指定为uintptr
var m uintptr = 4235564747474
var n uintptr = 2567891937466
//使用SwapUintptr方法和它的参数
var oldVal1 = atomic.SwapUintptr(&m, 4235564747474)
var oldVal2 = atomic.SwapUintptr(&n, 7454545419024)
//输出
fmt.Println((oldVal1) == m)
fmt.Println((oldVal2) == n)
}
输出:
true
false
在这里,oldVal1与“m”相等,因为要存储在* addr中的新值与旧值相同,因此返回true,但oldVal2与“n”不同,因为旧值与新分配的值不相似,因此返回false。
极客教程