Gomutex的原子操作

简介: 要对一个 int32 类型的变量执行原子递增操作,可以使用 sync/atomic 包中的 AddInt32 函数

在Go编程语言中, sync 包提供了一个名为 Mutex 的类型,用于互斥锁。然而,Go语言并没有直接提供类似 Gomutex 的原子无锁互斥体。相反,它通过 sync/atomic 包提供原子操作,用于对基本数据类型进行原子操作。

sync/atomic 包提供了一些函数,例如 AddInt32AddInt64CompareAndSwapInt32CompareAndSwapInt64 等,允许在相应类型的变量上执行原子操作。

例如,要对一个 int32 类型的变量执行原子递增操作,可以使用 sync/atomic 包中的 AddInt32 函数,示例如下:

package main

import (
    "fmt"
    "sync/atomic"
)

func main() {
   
    var counter int32

    atomic.AddInt32(&counter, 1) // 原子递增

    fmt.Println(counter) // 输出: 1
}

在上面的示例中,使用 AddInt32 函数对 counter 变量的值进行原子递增操作。 &counter 语法用于将 counter 变量的内存地址传递给原子操作。

通过利用 sync/atomic 包提供的原子操作,可以在Go程序中实现原子性和同步。

目录
相关文章
|
7月前
【原子操作】顺序操作
【原子操作】顺序操作
|
7月前
|
应用服务中间件 Linux 调度
锁和原子操作CAS的底层实现
锁和原子操作CAS的底层实现
61 0
|
Cloud Native Go C语言
C 语言的 互斥锁、自旋锁、原子操作
C 语言的 互斥锁、自旋锁、原子操作
|
存储 编译器 API
锁与原子操作CAS
锁与原子操作CAS
152 0
|
4月前
|
存储 算法
什么是原子操作?
【8月更文挑战第24天】
88 0
|
6月前
|
安全 程序员 C++
C++一分钟之-原子操作与线程安全
【6月更文挑战第27天】**C++的`std::atomic`提供线程安全的原子操作,解决多线程数据竞争。涵盖原子操作概念、应用、问题与对策。例如,用于计数器、标志位,但选择数据类型、内存顺序及操作组合需谨慎。正确使用能避免锁,提升并发性能。代码示例展示自旋锁和线程安全计数。了解并恰当运用原子操作至关重要。**
103 1
多线程的原子操作
多线程的原子操作
67 0
|
7月前
|
算法
原子操作CAS
原子操作CAS
45 0
|
7月前
|
缓存 Linux API
原子操作CAS与锁实现
原子操作CAS与锁实现
|
7月前
|
存储 安全 中间件
锁与原子操作CAS的底层实现
锁与原子操作CAS的底层实现