var mu sync.RWMutex
go func() {
mu.RLock()
defer mu.RUnlock()
mu.RLock() // In my real scenario this second lock happened in a nested function.
defer mu.RUnlock()
// More code.
}()
mu.Lock()
mu.Unlock() // The goroutine above still hangs.
如果一个函数读锁定读/写互斥的两倍,而另一个函数写锁,然后直写未锁相同的互斥体,原有的功能仍然挂起。
这是为什么?是不是因为互斥体允许代码执行有一个串行顺序?
我刚刚通过删除第二mu.RLock()行解决了这样的场景(我花了几个小时来查明)。
catspeake
相关分类