上一篇文章《Go语言开发基础系列(三十三)go语言的互斥锁Sync.Mutex》我们介绍了互次锁:Sync.Mutex,这个锁其实是串行的,也就是写的时候需要串行加锁,读的时候也需要串行加锁,那么我们有没有可以优化的地方,因为毕竟读的时候,如果可以进行并行读,那么程序的效率就会高很多。所以这就衍生出了这里的Sync.RWMutex,这个锁可以看做是Sync.Mutex的扩展类,他可以实现在写的时候是互斥锁,在读的时候可以并行进行,下面我们使用案例来演示下:
package main
import (
"sync"
"time"
)
var (
m sync.RWMutex
v1 int
)
func Set(i int) {
m.Lock()
time.Sleep(time.Second)
v1 = i
m.Unlock()
}
func Get() int {
m.RLock()
a := v1
m.RUnlock()
return a
}
func main() {
num := 10
var wg sync.WaitGroup
println("初始值是:%d", Get())
for i := 0; i < num; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
Set(i)
println("现在的结果是:%d", Get())
}(i)
}
wg.Wait()
}这里可以看到我们在写的时候使用的是lock和unlock,在读的时候使用的rlock和runlock。
以上就是go语言中Sync.RWMutex互斥锁的使用。

还没有评论,来说两句吧...