Golang atomic.SwapUintptr()函数及示例

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。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程