📅  最后修改于: 2023-12-03 15:01:01.382000             🧑  作者: Mango
atomic.StoreUintptr()
函数示例在 Go 语言中,atomic
包提供了一组原子操作函数,用于实现线程安全的并发编程。其中之一就是 atomic.StoreUintptr()
函数,用于原子性地将一个指针保存到 uintptr
类型的变量中。
func StoreUintptr(addr *uintptr, val uintptr)
参数列表:
addr
:一个指向 uintptr
类型变量的指针。val
:需要保存的 uintptr
类型的值。atomic.StoreUintptr()
函数用于将一个 uintptr
类型的值原子性地保存到指定的地址中。该函数保证对该地址的访问是原子的,不会被其他并发操作所干扰。
下面是一个示例代码片段,展示了如何使用 atomic.StoreUintptr()
函数:
package main
import (
"fmt"
"sync"
"sync/atomic"
)
func main() {
var wg sync.WaitGroup
var addr uintptr
var val uintptr = 42
wg.Add(2)
// 子 goroutine 中原子性地存储 uintptr 值
go func() {
atomic.StoreUintptr(&addr, val)
wg.Done()
}()
// 主 goroutine 中读取存储的 uintptr 值
go func() {
// 等待子 goroutine 完成
wg.Wait()
result := atomic.LoadUintptr(&addr)
fmt.Println("Stored uintptr:", result)
}()
wg.Wait()
}
在上述示例中,我们创建了两个 goroutine,一个用于调用 atomic.StoreUintptr()
函数将 val
存储到 addr
变量中,另一个 goroutine 则使用 atomic.LoadUintptr()
函数读取该存储的值并打印出来。使用 sync.WaitGroup
来等待所有 goroutine 完成。
atomic.StoreUintptr()
函数只能用于保存 uintptr
类型的值,不能保存其他类型。atomic.StoreUintptr()
函数保证对指定地址的访问是原子的,但对于指针指向的值的修改并不保证是原子的。atomic.StoreUintptr()
时,需要保证被存储的值和地址是有效的。atomic.StoreUintptr()
函数在性能上可能比常规的变量赋值操作略慢,因为它需要保证操作的原子性。更多关于 atomic
包中其他原子操作函数的使用示例,请参考 Go 官方文档。