网站后台样式模板门户一号wordpress主题
Go 语言的 sync 包是并发编程的核心工具集,提供了一系列同步原语,用于协调多个 goroutine 之间的操作,确保并发安全。它的设计围绕 Go 语言的 CSP(通信顺序进程)模型展开,同时也支持传统的共享内存同步方式。
一、核心同步原语
1. Mutex(互斥锁)
sync.Mutex 是最基础的互斥锁,保证同一时间只有一个 goroutine 能访问共享资源。
-
核心方法:
Lock():获取锁,若已被占用则阻塞等待。Unlock():释放锁,必须与Lock()成对使用。
-
使用场景:保护临界区资源,如共享变量的读写。
var mu sync.Mutex var count intfunc increment() {mu.Lock()defer mu.Unlock()count++ // 临界区操作 } -
注意事项:
- 不可重入:同一 goroutine 再次调用
Lock()会导致死锁。 - 需确保
Unlock()被执行(通常用defer)。
- 不可重入:同一 goroutine 再次调用
2. RWMutex(读写锁)
sync.RWMutex 是读写分离的锁,允许多个读操作并发,但写操作需独占。
-
核心方法:
- 读锁:
RLock()获取,RUnlock()释放(可被多个 goroutine 同时持有)。 - 写锁:
Lock()获取,Unlock()释放(独占)。
- 读锁:
-
适用场景:读多写少的场景(如缓存读取),提高并发效率。
var rwmu sync.RWMutex var data map[string]intfunc 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
