上一篇文章《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互斥锁的使用。
还没有评论,来说两句吧...