sync包-Mutex、RWMutex
Mutex 可以看做是锁,而 RWMutex 则是读写锁。一般的用法是将 Mutex 或者 RWMutex 和需要被保住的资源封装在一个结构体内。
- 如果有多个 goroutine 同时读写的资源,就一定要保护起来。
- 如果多个 goroutine 只读某个资源,那就不需要保护。使用锁的时候,优先使用 RWMutex。
- RWMutex:核心就是四个方法,RLock、RUnlock, Lock, UnlockMutex: Lock 和 Unlock
被保护资源(结构体)做成私有,
将锁和被保护资源封装在一起,
通过提供的公共方法操作被保护资源。
double-check
使用RWMutex实现 double-check:
- 加读锁 先检查一遍
- 释放读锁
- 加写锁 再检查一遍
cancelCtx中的double-check