📅  最后修改于: 2023-12-03 14:41:33.566000             🧑  作者: Mango
在 Go 语言中,我们可以使用 atomic 包提供的相关函数来实现原子操作,其中 atomic.AddInt64() 函数用于原子性地增加 int64 类型的值。
func AddInt64(addr *int64, delta int64) (new int64)
AddInt64()
函数有两个参数。
该函数返回一个 int64 类型的值,表示增加后的结果。
下面是一个简单的示例,展示了如何使用 AddInt64()
函数。
package main
import (
"fmt"
"sync/atomic"
)
func main() {
var num int64 = 0
// 调用 AddInt64() 函数,原子性地将 num 的值增加 1。
newNum := atomic.AddInt64(&num, 1)
fmt.Println("num 的原始值为:", num) // 输出:num 的原始值为: 1
fmt.Println("num 增加后的值为:", newNum) // 输出:num 增加后的值为: 1
// 再次调用 AddInt64() 函数,原子性地将 num 的值增加 3。
newNum = atomic.AddInt64(&num, 3)
fmt.Println("num 的原始值为:", num) // 输出:num 的原始值为: 4
fmt.Println("num 增加后的值为:", newNum) // 输出:num 增加后的值为: 4
}
在这个示例中,我们首先定义了一个 int64 类型的变量 num
,并将其初始化为 0。接着,我们调用了 AddInt64()
函数两次,第一次将 num
的值增加 1,第二次将其增加 3。在每一次调用 AddInt64()
函数之后,我们都输出了 num
的原始值和增加后的值。
值得注意的是,在上面的示例中,我们需要将 num
的地址传递给 AddInt64()
函数,因为这个函数需要直接修改变量的值,而不是仅仅返回一个新值。如果我们仅仅是希望增加一个值并将结果重新赋给一个变量,可以使用其他的函数,例如 atomic.LoadInt64()
和 atomic.StoreInt64()
。如果需要原子性地进行其他类型的操作,可以参考 atomic 包中的其他函数。