Go語言套件中的 sync 套件提供了兩種鎖定類型:sync.Mutex 和 sync.RWMutex。 (建議學習:go)
Mutex 是最簡單的鎖定類型,同時也比較暴力,當一個goroutine 獲得了Mutex 後,其他goroutine 就只能乖乖等到這個goroutine 釋放該Mutex。
RWMutex 相對友善些,是經典的單一寫多讀模型。在讀鎖佔用的情況下,會阻止寫,但不阻止讀,也就是多個goroutine 可同時取得讀鎖(呼叫RLock() 方法;
而寫鎖(呼叫Lock() 方法)會阻止任何其他goroutine(無論讀寫)進來,整個鎖相當於由該goroutine 獨佔。從RWMutex 的實作看,RWMutex 類型其實組合了Mutex:
type RWMutex struct { w Mutex writerSem uint32 readerSem uint32 readerCount int32 readerWait int32 }
sync.mutex加鎖後禁止其他地方讀或寫,這個適用於可能出現的在不同go協程中修改同一個資料
sync.rwmutex 的lock 和unlock 的使用和sync.mutex類似
sync.rwmutex 的rlock和runlock的使用適用於要讀取數據,防止在讀取的同時可能出現的別的地方寫入,而導致的讀取失敗
以上是golang 什麼時候用鎖的詳細內容。更多資訊請關注PHP中文網其他相關文章!