首頁  >  文章  >  後端開發  >  golang 什麼時候用鎖

golang 什麼時候用鎖

(*-*)浩
(*-*)浩原創
2019-12-27 11:30:552809瀏覽

golang 什麼時候用鎖

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn