Golang atomic.StoreUintptr() 函数及示例

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。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程