📌  相关文章
📜  Golang 中的 atomic.SwapUintptr()函数示例(1)

📅  最后修改于: 2023-12-03 15:01:01.412000             🧑  作者: Mango

Golang 中的 atomic.SwapUintptr() 函数示例

在 Golang 中,atomic 包提供了一系列原子操作函数,用于实现并发安全。

其中,atomic.SwapUintptr() 函数用于原子地交换 uintptr 类型的值。

函数原型
func SwapUintptr(addr *uintptr, new uintptr) (old uintptr)
函数说明

SwapUintptr() 函数用于原子地交换 addr 指向的 uintptr 类型的值为 new,并返回交换前的旧值。

示例代码
package main

import (
	"fmt"
	"sync/atomic"
)

func main() {
	var val1 uintptr = 1
	var val2 uintptr = 2

	// 使用 SwapUintptr() 函数交换 val1 和 val2 的值
	oldVal := atomic.SwapUintptr(&val1, val2)

	fmt.Println("val1 =", val1, ", val2 =", val2, ", oldVal =", oldVal)
}

运行该示例代码,输出结果为:

val1 = 2 , val2 = 2 , oldVal = 1

在上述代码中,首先定义了两个 uintptr 类型的变量 val1val2,分别赋初值为 1 和 2,然后调用 SwapUintptr() 函数交换它们的值,并将交换前的旧值保存在 oldVal 中。

最终输出结果表明,val1 的值已经被修改为 2,而 val2 的值始终为 2,同时也输出了交换前的旧值为 1。

注意事项

需要注意的是,SwapUintptr() 函数对应的指针类型参数必须是 uintptr 类型的指针。

而且,使用 SwapUintptr() 函数进行原子操作时,不应同时对同一变量进行其他类型的非原子操作,否则可能会出现意料之外的结果。