1. RWMutex,读写锁,又称读/写互斥锁。
读写锁是把对共享资源的"读操作"和"写操作"分别对待。
相比于互斥锁,读写锁可以实现更细緻的访问控制。
2. sync.RWMutex的类型和方法。
一个读写锁中包含两个锁,读锁和写锁。
sync.RWMutex类型中的Lock方法和Unlock方法,分别用于对写锁进行锁定和解锁。
而sync.RWMutex类型的RLock方法和RUnlock方法,分别用于对读锁进行锁定和解锁。
3. 使用读/写互斥锁的规则
a. 在写锁已被锁定的情况下,再试图锁定写锁,会阻塞当前的goroutine。
b. 在写锁已被锁定的情况下,试图锁定读锁,也会阻塞当前的goroutine。
c. 在读锁已被锁定的情况下,试图锁定写锁,会阻塞当前的goroutine。
d. 在读锁已被锁定的情况下,再试图锁定读锁,并不会阻塞当前的goroutine。
对于某个受到读写锁保护的共享资源,多个写操作不能同时进行,
写操作和读操作,也不能同时进行,但多个读操作却可以同时进行。
解锁"读写锁中未被锁定的写锁",会立即引发panic。对于读锁也是如此。
并且此种panic是不可恢复的。
参考来源:
郝林-Go语言核心36讲
https://github.com/hyper0x/Golang_Puzzlers
https://golang.org/pkg/cmd/go/internal/test/