提问人:VIEVK KUMAR 提问时间:7/10/2023 最后编辑:VIEVK KUMAR 更新时间:7/10/2023 访问量:79
在互斥锁和解锁期间无法从崩溃中恢复
Failed to Recover from Panic during mutex lock and unlock
问:
我正在尝试检查我是否可以从此代码中恢复恐慌:
我故意添加了互斥锁。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赞
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
当恐慌发生时,您无法恢复它。
评论
fatal error