为什么这段代码没有返回死锁错误?
提供的代码导入了 net/http 包,该包初始化执行的 Goroutine后台投票。这会无意中禁用死锁检测器,从而阻止返回预期的死锁错误。
要理解此行为,请考虑代码摘录:
package main
import (
"fmt"
"net/http"
)
func main() {
var ch = make(chan int)
ch 在这种情况下,main 函数创建一个通道并向其中发送一个值,这可能会导致死锁。但是,由于已导入 net/http 包,因此死锁检测器被禁用并且不会返回错误。
如果删除导入:
package main
import "fmt"
func main() {
var ch = make(chan int)
ch 现在可以正确返回死锁错误,因为后台轮询 Goroutine 未激活。
此行为与 GitHub Issue 中的讨论一致:https://github.com/golang /go/issues/12734,其中解释了导入 net/http 包会禁用死锁检测器。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3