Golang atomic.CompareAndSwapUintptr()函数及其例子

Golang atomic.CompareAndSwapUintptr()函数及其例子

在Go语言中,atomic包提供了更低层次的原子内存,有助于实现同步算法。Go语言中的 CompareAndSwapUintptr() 函数用于对uintptr值执行比较和交换操作。此函数在atomic包中定义。在这里,您需要导入”sync/atomic”包以使用这些函数。

语法:

func CompareAndSwapUintptr(addr *uintptr, old, new uintptr) (swapped bool)

在这里,addr表示地址,old表示旧的uintptr值,new是将自身从地址addr存储的旧值中交换出的uintptr新值。

注意:(*uintptr)是指向uintptr值的指针。而uintptr是一个无符号整数类型,它太大了,包含任何指针的位模式。

返回值:如果交换成功,则返回true,否则返回false。

示例1:

// Go语言中比较和交换的用法示例
  
// 引入主包
package main
  
// 导入fmt和sync/atomic
import (
    "fmt"
    "sync/atomic"
)
  
// 主函数
func main() {
  
    // 将uintptr的变量值赋给i, j和k
    var (
        i uintptr = 34764686
        j uintptr = 41343432525245
        k uintptr = 0
    )
  
    // 使用其参数调用CompareAndSwapUintptr方法
    Swap1 := atomic.CompareAndSwapUintptr(&i,
                         34764686, 647567565)
      
    Swap2 := atomic.CompareAndSwapUintptr(&j,
                          41343432525245, 76)
      
    Swap3 := atomic.CompareAndSwapUintptr(&k,
                                       0, 15)
  
    // 如果交换,则显示true
    // 否则显示false
    fmt.Println(Swap1)
    fmt.Println(Swap2)
    fmt.Println(Swap3)
  
    // 打印地址
    fmt.Println(i)
    fmt.Println(j)
    fmt.Println(k)
} 

输出:

true
true
true
647567565
76
15

示例2:

// Go语言中比较和交换的用法示例
  
// 引入主包
package main
  
// 导入fmt和sync/atomic
import (
    "fmt"
    "sync/atomic"
)
  
// 主函数
func main() {
  
    // 将uintptr的变量值赋给x
    var (
        x uintptr = 56466244
    )
  
    // 交换操作
    var oldvalue = atomic.SwapUintptr(&x, 2344444)
  
    // 打印旧值和交换后的值
    fmt.Println("Swapped_value:", x,
            ", old_value:", oldvalue)
  
    // 使用其参数调用CompareAndSwapUintptr方法
    Swap := atomic.CompareAndSwapUintptr(&x,
                         56466244, 13232324)
  
    // 如果交换成功,则返回true
    // 否则返回false
    fmt.Println(Swap)
    fmt.Println(x)
} 

输出:

Swapped_value: 2344444, old_value: 56466244
false
2344444

在此例中,交换操作获取的交换后的值必须是CompareAndSwapUintptr()方法的旧值,但是在这里,取的是交换操作的旧值,这不正确,因此返回false。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程