登录
首页 >  Golang >  Go问答

无法从紧急情况中恢复的时段内,互斥锁将被锁定和解锁

来源:stackoverflow

时间:2024-02-14 15:27:25 488浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《无法从紧急情况中恢复的时段内,互斥锁将被锁定和解锁》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我正在尝试检查是否可以从此代码中恢复恐慌:

我特意在 x 行添加了 mutex.unlock()

func main() {
   defer panicHandler()
   x := []int{1, 2, 3, 4}
   var mutex sync.Mutex
   mutex.Lock()
   defer mutex.Unlock()
   fmt.Println(x[2])
   mutex.Unlock()    // line x
}

func panicHandler() {
   rec := recover()
   if rec != nil {
       fmt.Println("Panic occurred - ", rec)
   }
}

它正在给予 - 致命错误:同步:解锁已解锁的互斥体

此外,该流程没有进入panichandler。 谁能帮助我理解这一点

我期望控制流进入panichandler()方法并恢复,但它没有发生


正确答案


除了 defer mutex.unlock() 之外,您还在最后调用 mutex.unlock()。所以当延迟运行时,它就已经解锁了!只需删除:

mutex.Unlock()    // line x

它并没有陷入恐慌,因为那是因为运行时错误,比如访问为零的东西。这是一个致命错误,您无法从中恢复。

到这里,我们也就讲完了《无法从紧急情况中恢复的时段内,互斥锁将被锁定和解锁》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>