Golang atomic.CompareAndSwapPointer() 函数的应用及示例

Golang atomic.CompareAndSwapPointer() 函数的应用及示例

Go 语言中,atomic 包提供了较低级别的原子内存,有助于实现同步算法。Go 语言中的 CompareAndSwapPointer() 函数用于执行比较和交换操作,用于 unsafe.Pointer 值,该函数在 atomic 包中定义。在此,您需要导入 “sync / atomic” 包才能使用这些函数。

语法:

func CompareAndSwapPointer(addr *unsafe.Pointer, old, new unsafe.Pointer) (swapped bool)

这里,addr 表示地址,old 表示不安全的指针值,是从 SwapPointer 操作返回的旧交换值,new 是不安全的指针新值,将从旧交换值中交换自己。

注意:(*unsafe.Pointer) 是不安全的指针值的指针。而 unsafe.Pointer 类型有助于在任意类型和内置 uintptr 类型之间启用转换。此外,unsafe 是可帮助 Go 程序的类型安全的包。

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

示例 1:

// Golang 中 CompareAndSwapPointer 函数的用法示例
  
// 包含主要程序
package main
  
// 导入 fmt、sync/atomic 和 unsafe 包
import (
    "fmt"
    "sync/atomic"
    "unsafe"
)
  
// 定义结构体 P
type P struct{ x,y,z int }
  
// 声明指向 P 结构体类型的指针
var pP *P
  
// 主函数
func main() {
  
    // 定义 addr 不安全指针
    var unsafe1 = (*unsafe.Pointer)(unsafe.Pointer(&pP))
  
    // 旧的不安全指针
    var sy P
  
    // 定义新的不安全指针
    px := atomic.SwapPointer(
        unsafe1, unsafe.Pointer(&sy))
  
    // 调用带有其参数的 CompareAndSwapPointer 方法
    y := atomic.CompareAndSwapPointer(
        unsafe1, unsafe.Pointer(&sy), px)
  
    // 如果交换成功,则返回 true,否则返回 false
    fmt.Println(y)
} 

输出:

true

示例 2:

// Golang 中 CompareAndSwapPointer 函数的用法示例
  
// 包含主要程序
package main
  
// 导入 fmt、sync/atomic 和 unsafe 包
import (
    "fmt"
    "sync/atomic"
    "unsafe"
)
  
// 定义结构体 P
type P struct{ x,y,z int }
  
// 声明指向 P 结构体类型的指针
var pP *P
  
// 主函数
func main() {
  
    // 定义 addr 不安全指针
    var unsafe1 = (*unsafe.Pointer)(unsafe.Pointer(&pP))
  
    // 旧的不安全指针
    var sy P
  
    // 定义新的不安全指针
    px := atomic.SwapPointer(
        unsafe1, unsafe.Pointer(&sy))
  
    // 调用带有其参数的 CompareAndSwapPointer 方法
    y := atomic.CompareAndSwapPointer(
        unsafe1, px, unsafe.Pointer(&sy))
  
    // 如果交换成功,则返回 true,否则返回 false
    fmt.Println(y)
} 

输出:

false

在上面的示例中,未执行交换,因为 CompareAndSwapPointer() 方法中的旧值必须是从 SwapPointer() 方法返回的值,但是此处的旧值与这里的值不同,因此从上面的代码返回 false。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程