为了账号安全,请及时绑定邮箱和手机立即绑定

golang 在死锁检测中有奇怪的行为

golang 在死锁检测中有奇怪的行为

Go
慕的地6264312 2021-11-08 18:22:01
package mainimport (    "log"    "net/http")func useless_func(address string) []byte {    http.Get("https://www.google.com")    return nil}func test_a(test_channel chan int) {    test_channel <- 1    return}func test() {    test_channel := make(chan int)    for i := 0; i < 10; i++ {        go test_a(test_channel)    }    for {        log.Println(<-test_channel)    }}func main() {    test()}此代码不会因死锁而中断,我在 Linux 4.1.6-1 和 3.16.0-4 下使用 go 1.5.1 amd64 尝试此代码并得到相同的结果。但是如果我删除 useless_func 或使用 go 1.4.3 或在 windows 下运行它,它会表现良好。这真的很奇怪,如果有人能解释一下吗?
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

Dominik Honnef针对 Go 1.5.1 的问题 ##12734提供了答案:

dominikh:问题真正在于使用 cgo (网络使用,忽略细节)。使用cgo时,Go死锁检测无法正常工作,因为C世界随时可能调用Go函数,所以理论上不存在死锁;我们可能只是无限期地等待外部函数调用。


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 272 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信