您好,登錄后才能下訂單哦!
這篇文章主要講解了“Go RWMutex并發怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Go RWMutex并發怎么使用”吧!
RWMutex表示讀寫鎖:
1.它允許任意讀操作同時進行,主要用于讀多寫少的場景。即修改數據時候需要加鎖讀取不需要加鎖。
2.讀寫鎖控制下的多個寫操作之間都是互斥的,當一個goroutine獲取寫鎖的之后,其他的goroutine獲取讀寫鎖都會等待
3 當一個goroutine獲取讀鎖之后,其他的goroutine獲取寫鎖都會等待,但其他goroutine獲取讀鎖時,都會繼續獲取鎖
綜上:1同時只能有一個 goroutine 能夠獲得寫鎖定;2同時可以有任意多個 goroutine 獲得讀鎖定;3同時只能存在寫鎖定或讀鎖定(讀和寫互斥)。
寫操作的鎖定和解鎖
// Lock 將 rw 設置為寫鎖定狀態,禁止其他例程讀取或寫入。func (rw *RWMutex) Lock()// Unlock 解除 rw 的寫鎖定狀態,如果 rw 未被寫鎖定,則該操作會引發 panic。func (rw *RWMutex) Unlock()
讀操作的鎖定和解鎖
// RLock 將 rw 設置為讀鎖定狀態,禁止其他例程寫入,但可以讀取。func (rw *RWMutex) RLock()// Runlock 解除 rw 的讀鎖定狀態,如果 rw 未被讀鎖定,則該操作會引發 panic。func (rw *RWMutex) RUnlock()
注意:
寫解鎖在進行的時候會試圖喚醒所有因欲進行讀鎖定而被阻塞的Goroutine.
讀解鎖在進行的時候只會在已無任何讀鎖定的情況下試圖喚醒一個因欲進行寫鎖定而被阻塞的Goroutine
若對一個未被寫鎖定的讀寫鎖進行寫解鎖,會引起一個運行時的恐慌
而對一個未被讀鎖定的讀寫鎖進行讀解鎖卻不會如此`
在讀多寫少的場景,讀寫鎖的性能高于互斥鎖
感謝各位的閱讀,以上就是“Go RWMutex并發怎么使用”的內容了,經過本文的學習后,相信大家對Go RWMutex并發怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。