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程序中实现原子性和同步。

目录
相关文章
|
3月前
【原子操作】顺序操作
【原子操作】顺序操作
|
3月前
|
应用服务中间件 Linux 调度
锁和原子操作CAS的底层实现
锁和原子操作CAS的底层实现
19 0
|
5月前
|
Cloud Native Go C语言
C 语言的 互斥锁、自旋锁、原子操作
C 语言的 互斥锁、自旋锁、原子操作
|
5月前
|
存储 编译器 API
锁与原子操作CAS
锁与原子操作CAS
91 0
|
4月前
|
API 调度 C语言
互斥锁,自旋锁,原子操作的原理,区别和实现
v互斥锁,自旋锁,原子操作的原理,区别和实现
27 0
|
3月前
|
算法
原子操作CAS
原子操作CAS
20 0
|
3月前
|
缓存 Linux API
原子操作CAS与锁实现
原子操作CAS与锁实现
|
3月前
|
存储 缓存 算法
理解原子操作与CAS锁
理解原子操作与CAS锁
27 0
|
9月前
多线程的原子操作
多线程的原子操作
41 0
|
5月前
互斥锁、自旋锁、原子操作
互斥锁、自旋锁、原子操作