0

clipboard.png

上图是在gopl上看到的关于goroutine 泄漏的问题,道理我是明白的,就是如果有goroutine因为ch没有接收动作而被一直阻塞在发送处,无法被回收。
但是我自己写代码,这样的

func main() {
    ch := make(chan int)
    for i := 0; i < 3; i++ {
        go func(i int) {
            ch <- 1
            fmt.Println("send ", i)
        }(i)
    }
    
    <-ch
    fmt.Println("exit!")
}

这样子不是应该有两个goroutine被阻塞了啊,但是程序正常结束,没有goroutine leak的错误。我想请问导致goroutine leak的充分条件是什么?明显有未正常退出的goroutine只是必要条件,还有什么条件呢?

hhxx 569
2016-12-08 提问
1 个回答
1

已采纳

你这样写不会阻塞,因为在不同goruntine里,循环的每个goruntine发送,main负责接收,但是这里因为main线程退出了,所以进程就结束了。

撰写答案

推广链接