空select报deadlock

2022-08-09T16:58:29

直接在main函数里写上一个空select会报:

fatal error: all goroutines are asleep - deadlock!
goroutine 1 [select (no cases)]:

而再开一个协程去执行就可以:

func main() {
    go func() {
        for {
            fmt.Println("go routine here")
            time.Sleep(time.Second)
        }
    }()
    select {}

}

而原因则再于go的调度方式1

有一个goroutine,即主程序,在等待一个选择,并且没有其他goroutine可以让这个goroutine做任何事情。
没有其他的goroutine可以做任何事情来让这个goroutine
进展。这就是一个死锁。如果其他的goroutine是在一个循环中
发送和接收信息,这就不是一个死锁。

参考:

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »