Golang atomic.LoadUintptr()函数及其示例
在Go语言中,atomic包提供了较低级别的原子内存,有助于实现同步算法。Go语言中的 LoadUintptr() 函数用于原子加载*addr。这个函数在原子包中定义。在这里,您需要导入“sync / atomic”包才能使用这些函数。
语法:
func LoadUintptr(addr *uintptr) (val uintptr)
在这里,addr表示地址。
注意:(*uintptr)是一个uintptr值的指针。uintptr是一个整数类型,它太大了,可以包含任何指针的位模式。
返回值:它返回加载到* addr的值。
示例1:
//演示在Golang中使用LoadUintptr函数的程序
//包括主包
package main
//导入fmt和sync / atomic
import (
"fmt"
"sync/atomic"
)
//主要函数
func main() {
//将值赋给uintptr
var (
i uintptr = 98
j uintptr = 255
k uintptr = 6576567667788
l uintptr = 5
)
//使用参数调用LoadUintptr方法
load_1 := atomic.LoadUintptr(&i)
load_2 := atomic.LoadUintptr(&j)
load_3 := atomic.LoadUintptr(&k)
load_4 := atomic.LoadUintptr(&l)
//显示在* addr中加载的uintptr值
fmt.Println(load_1)
fmt.Println(load_2)
fmt.Println(load_3)
fmt.Println(load_4)
}
输出:
98
255
6576567667788
5
示例2:
//演示在Golang中使用LoadUintptr函数的程序
//包括主包
package main
//导入fmt和sync/atomic
import (
"fmt"
"sync/atomic"
)
//主要函数
func main() {
//声明u
var u uintptr
//for循环
for i := 1; i < 1000; i + = 1 {
// AddUintptr方法的函数
go func() {
atomic.AddUintptr(&u, 9)
}()
}
//打印加载的值地址
fmt.Println(atomic.LoadUintptr(&u))
}
输出:
1818 //每次运行都返回随机值
在上面的示例中,每次调用AddUintptr()方法都返回新值,直到循环停止,LoadUintptr()方法加载这些新的uintptr值。这些值存储在不同的地址中,可能是随机的,因此此处每次运行的LoadUintptr()方法输出都不同。因此,这里的输出将返回一个随机值。
极客教程