gpt4 book ai didi

go - 检测一组 goroutine 之间的死锁

转载 作者:数据小太阳 更新时间:2023-10-29 03:41:02 24 4
gpt4 key购买 nike

Golang 可以在所有 goroutine 卡住时检测死锁。但是是否可以检测一组 goroutines 是否被卡住了?例如在下面的代码中,goroutine 1 和 2 将处于死锁状态,但程序继续运行,因为主 goroutine 没有卡住。我的问题是如何检测到 goroutine 1 和 2 作为一个组处于死锁状态,因为该组的所有成员都被卡住了?

func main() {
ch1 := make(chan int)
ch2 := make(chan int)

// goroutine 1
go func() {
ch1 <- 12
ch2 <- 13 // oh oh, wrong channel. deadlock between goroutine 1 and 2
}()

// goroutine 2
go func() {
println(<-ch1)
println(<-ch1)
}()

for {
// i'm busy
time.Sleep(time.Second)
}
}

最佳答案

pprof允许您在运行时获得完整的 goroutine 堆栈转储,这将向您显示哪些 goroutine 被阻止以及原因。这不完全是您所描述的,但它足以了解何时发生部分死锁。它还包括一个专用的 block 分析器,用于监控阻塞的 goroutines。

关于go - 检测一组 goroutine 之间的死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48548928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com