sync.Mutex
sync.Mutex 即為互斥鎖。
var (
sum int
mutex sync.Mutex
)
func add(i int) {
mutex.Lock()
sum += i
mutex.Unlock()
}
注意:sync.Mutex 不支持遞歸鎖锦溪,加鎖再加鎖躏精,會死鎖李丰。
sync.RWMutex
sync.RWMutex 即為讀寫鎖惭蟋,適合讀多寫少的場景苗桂,其滿足以下規(guī)則:
- 讀鎖占用的情況下會阻止寫,不會阻止讀告组,多個 goroutine 可以同時獲取讀鎖
- 寫鎖會阻止其他 goroutine(無論讀和寫)進來煤伟,整個鎖由該 goroutine 獨占
type Foo struct {
rwMutex sync.RWMutex
UserIdMapUserName map[uint32]string `json:"user_id_map_user_name"`
}
func main() {
foo := Foo{}
foo.rwMutex.RLock() // 讀鎖
foo.rwMutex.RUnlock() // 解除讀鎖
foo.rwMutex.Lock() // 寫鎖
foo.rwMutex.Unlock() // 解除寫鎖
}
sync.RWMutex 和 sync.Mutex 性能比較
TODO