# go语言Mutex与RWMutex
2021-06-28 20:04
标签:会同 for 多个 读写 sync 加锁 有一个 run code 适用于读写不确定,并且只有一个读或者写的场景 适用于读多写少的场景 以上代码中,会同时启动两个读和一个写,上述代码i的值可能会出现三种情况: # go语言Mutex与RWMutex 标签:会同 for 多个 读写 sync 加锁 有一个 run code 原文地址:https://www.cnblogs.com/wining/p/9648314.htmlMutex(互斥锁)
例:
package main
import (
"sync"
"time"
)
var (
l *sync.Mutex
i int
)
func increment() {
l.Lock()
defer l.Unlock()
i++
}
func main() {
l = new(sync.Mutex)
for i := 0; i
RWMutex(读写锁)
例:
package main
import (
"sync"
"time"
)
var (
l *sync.RWMutex
i int
)
func write() {
println("write start")
l.Lock()
i++
l.Unlock()
println("write end")
}
func read() {
println("read start")
l.RLock()
time.Sleep(time.Millisecond * 100)
println("read end, i =", i)
l.RUnlock()
}
func main() {
l = new(sync.RWMutex)
go read()
go read()
go write()
time.Sleep(time.Second)
}
写锁执行在两个读锁后执行,i输出为:0, 0
写锁在两个读锁中间执行,i输出为:0,1
写锁在两个读锁之前执行,i输出为:1,1