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函数,所以理论上不存在死锁;我们可能只是无限期地等待外部函数调用。
- 1 回答
- 0 关注
- 272 浏览
添加回答
举报
0/150
提交
取消