- “读”操作不存在资源竞争的问题
- 读写锁由结构体类型sync.RWMutex表示。此类型的方法集合中包含两对方法:
- 一组是对写操作的锁定和解锁,简称“写锁定”和“写解锁”:
func (*RWMutex)Lock()
func (*RWMutex)Unlock()
2.另一组表示对读操作的锁定和解锁,简称为“读锁定”与“读解锁”:
func (*RWMutex)RLock()
func (*RWMutex)RUlock()
package main
import (
"fmt"
"math/rand"
"sync"
)
var count int
var rwlock sync.RWMutex
func read(n int) {
rwlock.RLock()
fmt.Printf(" %d 读取数据...\n", n)
num := count
fmt.Printf(" %d 读取结束,读到 %d\n", n, num)
defer rwlock.RUnlock()
}
func write(n int) {
rwlock.Lock()
fmt.Printf(" %d 正在写数据...\n", n)
num := rand.Intn(1000)
count = num
fmt.Printf(" %d 写数据结束,写入新值 %d\n", n, num)
defer rwlock.Unlock()
}
func main() {
for i := 0; i < 5; i++ {
go read(i + 1)
}
for i := 0; i < 5; i++ {
go write(i + 1)
}
for {
}
}