繁体   English   中英

Goroutine 缓冲通道死锁

[英]Goroutine buffered channel deadlock

在主 goroutine 中,如果我向通道发送超出容量的值,我会遇到死锁,但是如果我在不同的 goroutine 中发送,就不会出现死锁,为什么?

func main() {
    c := make(chan int, 2)
    for i := 0; i < 3; i++ {
        c <- i
    }
}

func main() {
    c := make(chan int, 2)
    go func() {
        for i := 0; i < 3; i++ {
            c <- i
        }
        close(c)
    }()
    time.Sleep(5 * time.Second)
}
func main() {
   c := make(chan int, 2)
   for i := 0; i < 3; i++ {
       // Blocking operation
       c <- i
   }
}
By default >>>sends<<< and receives block(!) until both the sender and receiver are ready

结帐 - https://gobyexample.com/channels

您的频道上没有接收者,主 goroutine(= 发送者)被阻止

暂无
暂无

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

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