【发布时间】:2018-11-26 14:32:23
【问题描述】:
假设我有这两个结构:
type A struct {
Mutex sync.Mutex
i int
}
type B struct {
A
sync.Mutex
}
现在,当我尝试锁定 B 和 A 时,我遇到了死锁:
var b B
b.Lock()
b.Mutex.Lock()
b.Mutex.Unlock()
b.Unlock()
我发现这与结构A的互斥锁的名称有关,例如,如果我将其命名为Mutexx而不是Mutex,则不会出现死锁。但我不知道为什么这很重要。谁能解释一下这种行为?
【问题讨论】:
-
出于兴趣,这是一个计算递归锁的实现:github.com/jwells131313/goethe
标签: go struct mutex deadlock embedding