从锁定的sync.Mutex中恢复

时间:2017-07-27 17:22:46

标签: go

我正在尝试解锁互斥锁,如果它被锁定了。但是,这会产生运行时错误,所以我认为我会使用recover方法:

package main

import "sync"

func main() {
    var l sync.Mutex
    l.Lock()
    l.Unlock()

    defer func() {
        if recover() != nil {
            // the return result can be altered 
            // in a defer function call

        }
    }()

    l.Unlock()  

}

然而,即使恢复,我仍然得到:

fatal error: sync: unlock of unlocked mutex

1 个答案:

答案 0 :(得分:-1)

您可以在锁定后立即解除锁定互锁,这样您就不必记住为退出该功能的每个返回路径解锁它。

在l.Lock()下删除l.Unlock或将其更改为

defer l.Unlock()

并删除第二个l.Unlock