关于golang读写锁
生活随笔
收集整理的這篇文章主要介紹了
关于golang读写锁
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
下面由golang教程欄目給大家介紹關(guān)于golang讀寫鎖,希望對需要的朋友有所幫助!
golang讀寫鎖,其特征在于
讀鎖:可以同時(shí)進(jìn)行多個(gè)協(xié)程讀操作,不允許寫操作
寫鎖:只允許同時(shí)有一個(gè)協(xié)程進(jìn)行寫操作,不允許其他寫操作和讀操作
讀寫鎖共有四個(gè)方法
RLock:獲取讀鎖
RUnLock:釋放讀鎖
Lock:獲取寫鎖
UnLock:釋放寫鎖
使用例子如下
package main
import ( "fmt"
"sync"
"time")var gRWLock *sync.RWMutexvar gVar intfunc init() {
gRWLock = new(sync.RWMutex)
gVar = 1}
func main() { var wg sync.WaitGroup
go Read(1, &wg)
wg.Add(1)
go Write(1, &wg)
wg.Add(1)
go Read(2, &wg)
wg.Add(1)
go Read(3, &wg)
wg.Add(1)
wg.Wait()
}
func Read(id int, wg *sync.WaitGroup) {
fmt.Printf("Read Coroutine: %d start\\n", id)
defer fmt.Printf("Read Coroutine: %d end\\n", id)
gRWLock.RLock()
fmt.Printf("gVar %d\\n", gVar)
time.Sleep(time.Second)
gRWLock.RUnlock()
wg.Done()
}
func Write(id int, wg *sync.WaitGroup) {
fmt.Printf("Write Coroutine: %d start\\n", id)
defer fmt.Printf("Write Coroutine: %d end\\n", id)
gRWLock.Lock()
gVar = gVar + 100
fmt.Printf("gVar %d\\n", gVar)
time.Sleep(time.Second)
gRWLock.Unlock()
wg.Done()
}
總結(jié)
以上是生活随笔為你收集整理的关于golang读写锁的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关键词排名的的十个技巧
- 下一篇: php如何去除标点符号