Go的sync.RWMutex(六)
生活随笔
收集整理的這篇文章主要介紹了
Go的sync.RWMutex(六)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
RWMutex
RWMutex有兩種鎖寫鎖和讀鎖,用法也有不同,首先讀鎖可以同時加多個,但是寫鎖就不行 只能1個
給資源可以加多個讀鎖或者一個寫鎖,其經(jīng)常用于讀次數(shù)遠(yuǎn)遠(yuǎn)多于寫次數(shù)的場景.
原則
讀鎖的時候別的協(xié)程也可以讀,但是不可以寫
寫鎖的時候其他協(xié)程都不可以操作,不可以讀也不可以寫
操作
- RLock() //讀鎖定?
- RUnlock() //讀解鎖
- Lock() //寫鎖定?
- Unlock() //寫解鎖
實例
package mainimport ("sync""time" )var m *sync.RWMutexfunc main() {m = new(sync.RWMutex)go write(1)go read(2)go write(3)time.Sleep(7 * time.Second) }// RWMUX是控制協(xié)程對于資源的改變順序的 // RLOCK RULOCK // LOCK ULOCK // 在一個協(xié)程里面 // 對資源的 // 讀鎖的時候別的也可以讀,但是不可以寫 // 寫鎖的時候都不可以操作,不可以讀也不可以寫func read(i int) {println(i, "read start")m.RLock()println(i, "reading")time.Sleep(1 * time.Second)m.RUnlock()println(i, "read over") }func write(i int) {time.Sleep(1 * time.Second)println(i, "write start")m.Lock()println(i, "writing")time.Sleep(2*time.Second)m.Unlock()println(i, "write over") }// 2 read start // 2 reading // 3 write start // 1 write start // 2 read over // 3 writing // 3 write over // 1 writing // 1 write over?
總結(jié)
以上是生活随笔為你收集整理的Go的sync.RWMutex(六)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JQUERY获取DOM
- 下一篇: 刷短视频杀时间 中老年人竟然更爱刷短视