goroutine中的死锁

问题描述 投票:0回答:3

有人可以给我一些有关此代码的见解,为什么这会在for x:=range c中出现死锁错误>

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

    for i:=0;i<5;i++{
        go func(chanel chan int,i int){
            println("i",i)
            chanel <- 1
        }(c,i)
    }

    for x:=range c {
        println(x)
    }
    println("Done!")
}

有人可以给我一些有关此代码的见解,为什么会在x:= range c func main(){c:= make(chan int,10)中出现i:= 0; i <5; i ++ {go func(chanel chan int,i int){...

go deadlock goroutine
3个回答
2
投票

因为此:


2
投票

您创建了五个goroutine,每个goroutine将一个整数值发送到通道。一旦所有这五个值都被写入,就不会再有其他goroutine写入通道了。


1
投票

需要关闭频道以指示任务已完成。

© www.soinside.com 2019 - 2024. All rights reserved.