繁体   English   中英

Go 通道死锁未发生

[英]Go channel deadlock is not happening

package main
import (
    "fmt"
    "time"
)

func main() {
    c := make(chan int)

    go func() {
        fmt.Println("hello")
        c <- 10
    }()

    time.Sleep(2 * time.Second)
}

在上面的程序中,我创建了一个 Go 例程,它正在写入通道 c 但没有其他 go 例程正在从通道中读取。 为什么在这种情况下没有死锁?

死锁意味着所有 goroutine 都被阻塞,而不仅仅是您选择的一个任意 goroutine。

main goroutine 只是处于休眠状态,一旦结束,它就可以继续运行。

如果您使用select{}永久阻塞操作切换sleep ,您将遇到死锁:

c := make(chan int)

go func() {
    fmt.Println("hello")
    c <- 10
}()

select {}

Go 游乐场上试一试。

参见相关: 为什么没有接收器被阻塞的错误?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM