在 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 的原因。