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

golang 什麼時候用鎖

(*-*)浩
發布: 2019-12-27 11:30:55
原創
2845 人瀏覽過

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

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板