【发布时间】:2019-08-29 00:53:13
【问题描述】:
两次解锁互斥锁是否安全? 我的代码:
var m sync.RWMutex = sync.RWMutex{}
func Read() {
m.RLock()
defer m.RUnlock()
// Do something that needs lock
err := SomeFunction1()
if err != nil {
return
}
m.RUnlock()
// Do something that does not need lock
SomeFunction2()
}
我需要defer m.RUnlock() 来处理SomeFunction1() 返回错误的情况。但是当SomeFunction1()无误返回时,m会被m.RUnlock()和defer m.RUnlock()解锁两次。
两次解锁互斥锁是否安全?如果没有,我应该如何修复我的代码?
【问题讨论】:
-
请注意,当您发现自己想要执行此操作(在函数中的各个奇怪点锁定和解锁互斥锁)时,通常表明您的代码不是真的结构合理。不过,在一些奇怪的情况下这是合适的。
标签: go