直接上死锁例子
package main import ( "sync" "time" ) var lock sync.RWMutex func main() { go func() { outRLock() }() time.Sleep(time.Second) wLock() } func outRLock() { lock.RLock() defer lock.RUnlock() time.Sleep(time.Second * 2) innerRLock() } func innerRLock() { lock.RLock() defer lock.RUnlock() } func wLock() { lock.Lock() defer lock.Unlock() }
原因当有写锁申请时会阻塞掉新的读锁申请(写锁优先原则)