Cloud Native Foundation - Go Sync
线程安全
锁
- Go 不仅提供了基于 CSP 的通讯模型,也支持基于共享内存的多线程数据访问
sync
包提供了锁的基本原语
同步工具 | 用途 |
---|---|
sync.Mutex |
互斥锁:Lock加锁,Unlock解锁 |
sync.RWMutex |
读写分离锁:不限制并发读,只限制并发写和并发读写 |
sync.WaitGroup |
等待一组 goroutine 返回,类似于 Java 的 CountDownLatch |
sync.Once |
保证某段代码只执行1次,典型场景:单例模式 |
sync.Cond |
让一组 goroutine 在满足特定条件时被唤醒,典型场景:生产者消费者模型 |
Mutex
1 | func unsafeWrite() { // fatal error: concurrent map writes |
RWMutex
1 | func main() { |
WaitGroup
1 | func waitBySleep() { |
Once
1 | type NumSlice []int |
Cond
1 | type Queue struct { |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.