📌  相关文章
📜  Golang 中的 atomic.CompareAndSwapUint32()函数示例

📅  最后修改于: 2021-10-24 13:33:40             🧑  作者: Mango

在 Go 语言中,原子包提供较低级别的原子内存,这有助于实现同步算法。 Go语言的CompareAndSwapUint32()函数用于对uint32值进行比较和交换操作。这个函数是在 atomic 包下定义的。在这里,您需要导入“sync/atomic”包才能使用这些功能。

句法:

func CompareAndSwapUint32(addr *uint32, old, new uint32) (swapped bool)

这里, addr表示地址, old表示值的 uint32 值, new是将从旧值交换自身的 uint32 新值。

注意: (*uint32) 是指向 uint32 值的指针。而 uint32 是位长为 32 的整数类型。 而且,int32 包含了从 0 到 4294967295 的所有无符号 32 位整数的集合。

返回值:如果交换完成则返回真,否则返回假。

示例 1:

// Golang Program to illustrate the usage of
// CompareAndSwapUint32 function
  
// Including main package
package main
  
// importing fmt and sync/atomic
import (
    "fmt"
    "sync/atomic"
)
  
// Main function
func main() {
  
    // Assigning variable values to the uint32
    var (
        i uint32 = 34764
    )
  
    // Calling CompareAndSwapUint32 
    // method with its parameters
    Swap := atomic.CompareAndSwapUint32(&i, 34764, 67576)
  
    // Displays true if swapped else false
    fmt.Println(Swap)
    fmt.Println("The value of i is: ",i)
}

输出:

true
The value of i is:  67576

示例 2:

// Golang Program to illustrate the usage of
// CompareAndSwapUint32 function
  
// Including main package
package main
  
// importing fmt and sync/atomic
import (
    "fmt"
    "sync/atomic"
)
  
// Main function
func main() {
  
    // Assigning variable values to the uint32
    var (
        i uint32 = 54325
    )
  
    // Swapping operation
    var oldvalue = atomic.SwapUint32(&i, 7687)
  
    // Printing old value and swapped value
    fmt.Println("Swapped_value:", i, ", old_value:", oldvalue)
  
    // Calling CompareAndSwapUint32 method with its parameters
    Swap := atomic.CompareAndSwapUint32(&i, 54325, 677876)
  
    // Displays true if swapped else false
    fmt.Println(Swap)
    fmt.Println("The value of i is: ",i)
}

输出:

Swapped_value: 7687 , old_value: 54325
false
The value of i is:  7687

在这里,从交换操作中获得的交换值必须是旧值,这就是返回 false 的原因。