用chan接收数据后,打印输出会出现deadlock

来源:2-2 Hello World并发版

慕妹2184772

2020-06-08 11:50

func main() {
   ch := make(chan string)

   for i := 0; i < 300; i++ {
      go PrintHello(i, ch)
   }

   for {
      msg := <-ch
      fmt.Println(msg)
   }

}

func PrintHello(i int, ch chan string) {
   ch <- fmt.Sprintf("print %d\n", i)
}


运行后:

fatal error: all goroutines are asleep - deadlock!


goroutine 1 [chan receive]:

main.main()

~/simpleGoRoutine.go:15 +0xa1

print 0


print 2

...

写回答 关注

1回答

  • Amanoi
    2020-06-18 18:07:09
    第二个for 从管道中取数据 取完后仍然会取到0值


搭建并行处理管道,感受GO语言魅力

通过搭建并行数据处理管道,展示go语言在并发编程方面的优势

19375 学习 · 78 问题

查看课程

相似问题