在互斥锁和解锁期间无法从崩溃中恢复

Failed to Recover from Panic during mutex lock and unlock

提问人:VIEVK KUMAR 提问时间:7/10/2023 最后编辑:VIEVK KUMAR 更新时间:7/10/2023 访问量:79

问:

我正在尝试检查我是否可以从此代码中恢复恐慌:
我故意添加了互斥锁。Unlock() 在第 x 行

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() 方法并恢复,但它没有发生

互斥 恐慌

评论

2赞 JimB 7/10/2023
A不是恐慌,你无法从中恢复过来。fatal error

答:

-2赞 Andrew Arrow 7/10/2023 #1

除了 .因此,当延迟运行时,它已经解锁了!只需删除:mutex.Unlock()defer mutex.Unlock()

mutex.Unlock()    // line x

它没有恐慌,因为这是针对运行时错误,例如访问零内容。这是一个致命错误,您无法从中恢复。

评论

0赞 VIEVK KUMAR 7/10/2023
谢谢你的回答。因此,我们无法从致命错误中恢复
0赞 Gatusko 7/10/2023
当恐慌发生时,您无法恢复它。