Go 语言 sync 包解析

Go 语言的 sync 包是并发编程的核心工具集,提供了一系列同步原语,用于协调多个 goroutine 之间的操作,确保并发安全。它的设计围绕 Go 语言的 CSP(通信顺序进程)模型展开,同时也支持传统的共享内存同步方式。

一、核心同步原语

1. Mutex(互斥锁)

sync.Mutex 是最基础的互斥锁,保证同一时间只有一个 goroutine 能访问共享资源。

  • 核心方法

    • Lock():获取锁,若已被占用则阻塞等待。
    • Unlock():释放锁,必须与 Lock() 成对使用。
  • 使用场景:保护临界区资源,如共享变量的读写。

    var mu sync.Mutex
    var count int
    
    func increment() {
         
         
        mu.Lock()
        defer mu.Unlock()
        count++ // 临界区操作
    }
    
  • 注意事项

    • 不可重入:同一 goroutine 再次调用 Lock() 会导致死锁。
    • 需确保 Unlock() 被执行(通常用 defer)。
2. RWMutex(读写锁)

sync.RWMutex 是读写分离的锁,允许多个读操作并发,但写操作需独占。

  • 核心方法

    • 读锁:RLock() 获取,RUnlock() 释放(可被多个 goroutine 同时持有)。
    • 写锁:Lock() 获取,Unlock() 释放(独占)。
  • 适用场景:读多写少的场景(如缓存读取),提高并发效率。

    var rwmu sync.RWMutex
    var data map[string]int
    
    func readKey(key string) int {
         
         
        rwmu.RLock()
        defer rwmu.RUnlock()
        return data[key]
    }
    
    func writeKey(key string, val int) {
         
         
        rwmu.Lock()
        defer rwmu.Unlock()
        data[key] = val
    }
    
3. WaitGroup

sync.WaitGrou

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bing.shao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值