Golang atomic.StoreUintptr() 函数及示例
在 Go 语言中,原子包(atomic packages)提供了较低级别的原子内存,这对于实现同步算法非常有帮助。Go 语言中的 StoreUintptr() 函数用于将 val 原子地存储到 *addr 中。该函数在 atomic 包中定义。在这里,需要导入 “sync/atomic” 包以使用这些函数。
语法:
func StoreUintptr(addr *uintptr, val uintptr)
在这里,addr 表示地址。
注意:(*uintptr) 是指向 uintptr 值的指针。而 uintptr 是一个整数类型,大到足以包含任何指针的位模式。
返回值:将 val 存储到 *addr 中,可以在需要时返回。
示例 1:
// 演示
// Golang 中 StoreUintptr 函数的使用
// 导入 fmt 和 sync/atomic 包
package main
import (
"fmt"
"sync/atomic"
)
// 主函数
func main() {
// 为存储 val 的地址定义变量
var (
x uintptr
y uintptr
)
// 使用 StoreUintptr 方法,采用其参数
atomic.StoreUintptr(&x, 444443)
atomic.StoreUintptr(&y, 223)
// 显示存储在地址中的值
fmt.Println(atomic.LoadUintptr(&x))
fmt.Println(atomic.LoadUintptr(&y))
}
输出:
444443
223
这里首先在定义的地址中存储了 uintptr 值,然后以上面的 LoadUintptr() 方法返回它们。
示例 2:
// 演示
// Golang 中 StoreUintptr 函数的使用
// 导入 fmt 和 sync/atomic 包
package main
import (
"fmt"
"sync/atomic"
)
// 主函数
func main() {
// 为存储 val 的地址定义变量
var (
x uintptr
)
// 使用 StoreUintptr 方法,采用其参数
atomic.StoreUintptr(&x, 5255151111)
// 加载存储的 val
z := atomic.LoadUintptr(&x)
// 如果值相同,则返回 true,否则返回 false
fmt.Println(z == x)
// 如果地址相同,则返回 true,否则返回 false
fmt.Println(&z == &x)
}
输出:
true
false
这里存储和加载的值相同,因此返回 true,但它们的地址不同,因此在这种情况下返回 false。
极客教程