sync.RWMutex 是针对读、写操作设计的单写多读锁。即同时可存在一个 Lock() 和多个 RLock()。
特性
- RLock:读锁定
- 加读锁时,如果存在写锁则 RLock() 操作会阻塞当前 goroutine,直到写锁定解除为止;
 - 没有写锁存在时,RLock() 操作不会阻塞 goroutine;
 - 没有读锁的情况下进行 RUnLock() 操作会引发 panic 异常;
 - RUnLock()的数量大于 RLock() 数量时,会引发 panic 异常;
 
 - Lock:写锁定
 
import ( “fmt” “sync” “time” )
func main() { rw := &sync.RWMutex{} rw.Lock() fmt.Println(“Locked”)
for i := 0; i < 4; i++ {go func(i int) {fmt.Println("Not lock: ", i)rw.RLock()defer rw.RUnlock()fmt.Println("Locked: ", i)fmt.Println("Unlock the lock: ", i)}(i)}time.Sleep(time.Millisecond)fmt.Println("Unlock")rw.Unlock()time.Sleep(time.Millisecond)
}
```

