版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010230794/article/details/78554370
sync包的读写锁RWMutex的使用(sync.RWMutex)
我们使用“读写”锁的场景主要是在多线程的安全操作下,并且读的情况多于写的情况,也就是说既满足多线程操作的安全性,也要确保性能不能太差,这时候,我们可以考虑使用读写锁。当然你也可以简单暴力直接使用互斥锁(Mutex)。
RWMutex的使用主要事项
- 1、读锁的时候无需等待读锁的结束
- 2、读锁的时候要等待写锁的结束
- 3、写锁的时候要等待读锁的结束
- 4、写锁的时候要等待写锁的结束
RWMutex的四种操作方法
RLock() //读锁定
RUnlock() //读解锁
Lock() //写锁定
Unlock() //写解锁
废话少说直接上代码:
package main
import (
"sync"
"time"
)
var m *sync.RWMutex
func main() {
m = new(sync.RWMutex)
go write(1)
go read(21)
go write(3)
go read(22)
go write(4)
go read(23)
go write(5)
go read(24)
go write(6)
go read(25)
go write(7)
time.Sleep(20 * time.Second)
}
func read(i int) {
println(i, "read start")
m.RLock()
var p = 0
var pr = "read"
for {
pr += "."
if p == 10 {
break
}
time.Sleep(350 * time.Millisecond)
p++
println(i, pr)
}
m.RUnlock()
println(i, "read end")
}
func write(i int) {
println(i, "write start")
m.Lock()
var p = 0
var pr = "write"
for {
pr += "."
if p == 10 {
break
}
time.Sleep(350 * time.Millisecond)
p++
println(i, pr)
}
m.Unlock()
println(i, "write end")
}
执行结果: