Golang atomic.AddUint64() 函数及其示例

Golang atomic.AddUint64() 函数及其示例

Go 语言中, atomic 包提供了更低级别的原子内存,有助于实现同步算法。Go 语言的 AddUint64() 函数用于将 delta 自动添加到 *addr 。此函数在 atomic 包中定义,因此必须导入 “sync/atomic” 包才能使用这些函数。

语法:

func AddUint64(addr *uint64, delta uint64) (new uint64)

在此, addr 表示地址, delta 表示大于零的少量位数。此外,如果您想从 x 中减去一个有符号的正常数 c,则可以通过 AddUint64( &x, ^uint64(c-1)) 完成,并且如果您想单独递减 x,则可以通过 AddUint64( &x, ^uint64(0)) 完成。

注意: (*uint64) 是指向 uint64 值的指针。此外,uint64 包含从 0 到 18446744073709551615 的所有无符号的 64 位整数集合。

返回值: 它会自动添加 addrdelta 并返回一个新值。

示例 1:

// Golang 程序,说明
// 如何使用 AddUint64 函数
 
// 包含 main 包
package main
 
// 导入 fmt 和 sync/atomic
import (
    "fmt"
    "sync/atomic"
)
 
// 主函数
func main() {
 
    // 指定变量
    // 值到 uint64
    var (
        i uint64 = 453
        j uint64 = 167
        k uint64 = 18446744073709551615
        l uint64 = 0
        z int    = 15
    )
 
    // 将常数值指定到 uint64
    const (
        x uint64 = 7
        y uint64 = 12
    )
 
    // 调用带有其参数的 AddUint64 方法
    a_1 := atomic.AddUint64(&i, -uint64(z))
    a_2 := atomic.AddUint64(&j, ^(y - 1))
    a_3 := atomic.AddUint64(&k, x-1)
    a_4 := atomic.AddUint64(&l, ^uint64(z-1))
 
    // 在自动添加 addr 和 delta 后显示输出
    fmt.Println(a_1)
    fmt.Println(a_2)
    fmt.Println(a_3)
    fmt.Println(a_4)
} 

输出:

438
155
5
18446744073709551601

示例 2:

// Golang 程序,说明
// 如何使用 AddUint64 函数
 
// 包含 main 包
package main
 
// 导入 fmt 和 sync/atomic
import (
    "fmt"
    "sync/atomic"
)
 
// 定义类型为 uint64 的 addr
type addr uint64
 
// 添加 addr 和 delta 的函数
func (u *addr) adds() uint64 {
 
    // 调用 AddUint64()
    // 函数和它的
    // 参数
    return atomic.AddUint64((*uint64)(u), 325)
}
 
// 主函数
func main() {
 
    // 定义 u 变量
    var u addr
 
    // 循环递增 u 的值
    for i := 1; i < 11; i *= 3 {
 
        // 在添加 delta 和 addr 后显示新值
        fmt.Println(u.adds())
    }
} 

输出:

325
650
975

在上面的例子中,我们定义了一个名为 adds 的函数,该函数返回从调用 AddUint64 方法返回的输出。在主函数中,我们定义了一个“for”循环,每次调用时都会增加‘u’的值。在这里,AddUint64()方法的第二个参数是常量,只有第一个参数的值是可变的。但是,前一次调用的输出将是AddUint64()方法的第一个参数的值,在循环停止之前,输出将成为下一次调用的第一个参数值。
让我们看一下上面的例子如何工作:

第一个参数=0,第二个参数=325     //返回(0 + 325 = 325)

// 现在,上面的输出是下一次调用AddUint64()方法的第一个参数值
第一个参数为325,第二个参数为325     //返回(325 + 325 = 650)
第一个参数为650,第二个参数为325     //返回(650 + 325 = 975)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程