我需要阅读更喜欢golang 中的RW互斥锁。golang中是否有满足我需求的包。我试过sync.RWMutex,但它似乎是写优先锁。这是我试图区分 Go 的 RWMutex,
package main
import (
"fmt"
"sync"
"time"
)
func main() {
y := &resource{x: 10}
go func() {
defer fmt.Println("done first read")
y.RLock()
defer y.RUnlock()
go func() {
defer fmt.Println("done first write")
fmt.Println("first write req")
y.Lock()
fmt.Println("after first write granted")
defer y.Unlock()
}()
time.Sleep(time.Second)
go func() {
defer fmt.Println("done second read")
fmt.Println("second read req")
y.RLock()
fmt.Println("after second read granted")
defer y.RUnlock()
}()
time.Sleep(10 * time.Second)
}()
time.Sleep(time.Minute)
}
type resource struct {
sync.RWMutex
x int
}
输出:
first write req
second read req
done first read
after first write granted
done first write
after second read granted
done second read
第二个读者一直等待直到作者释放锁。
慕桂英4014372
九州编程
相关分类