【发布时间】:2013-05-11 13:31:45
【问题描述】:
将以下代码视为一个简化示例:
func printer(c <-chan int) {
for {
fmt.Print(<-c)
}
}
func provide() {
c := make(chan int)
go printer(c)
for i := 1; i <= 100; i++ {
c <- i
}
}
函数provide 创建一个goroutine printer 打印provide 生成的数据。
我的问题是,provide 返回并且printer 开始阻塞空通道后会发生什么。 go 例程是否会泄漏,因为没有进一步引用 c 还是垃圾收集器会捕获这种情况并处理 go 例程和 c?
如果确实是这种代码导致了内存泄漏,我可以采取什么策略来防止这种内存泄漏的发生?
【问题讨论】:
标签: memory-leaks go goroutine