【发布时间】:2014-11-29 03:13:01
【问题描述】:
这个例子取自http://blog.golang.org/pipelines。它运行并给出正确答案,但显示以下运行时错误:“致命错误:所有 goroutines 都处于睡眠状态 - 死锁!”。谁能帮我理解为什么会这样? 主包
import (
"fmt"
)
func gen(nums ...int) <- chan int {
out := make(chan int)
go func() {
for _, n := range nums {
out <- n
}
}()
return out
}
func sq(in <- chan int) <- chan int {
out := make(chan int)
go func() {
for n := range in {
out <- n * n
}
close(out)
}()
return out
}
func main() {
for n := range sq(gen(2,3)) {
fmt.Println(n)
}
}
但是下面的修改没有。
func main() {
// Set up the pipeline.
c := gen(2, 3)
out := sq(c)
// Consume the output.
fmt.Println(<-out) // 4
fmt.Println(<-out) // 9
}
【问题讨论】:
标签: concurrency go