读锁嵌套导致死锁(golang)

 直接上死锁例子

原因当有写锁申请时会阻塞掉新的读锁申请(写锁优先原则)

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()
}

 

你可能感兴趣的:(读锁嵌套导致死锁(golang))