大家来解惑--这段代码有啥问题?

javasgl · · 2870 次点击
``` sizes := make(chan int64) ``` 这是无缓冲channel,如果不开goroutine来sync.wait(), makeThumbnails6函数会阻塞在wg.wait()这里等待所有goroutine结束,但是在goroutine中对sizes写数据的操作又会阻塞, 因为是无缓冲channel,而 ``` for size := range sizes { total += size } ``` 这个读channel的操作永远得不到执行,因此会形成死锁 但是在你的程序里,在main中直接wg.Wait()即可,不需要另开一个goroutine,否则你的main会很快退出,你可能无法看到输出
#23
更多评论
polaris
社区,需要你我一同完善!
问题的关键在于 main goroutine 提前退出了。 不论是那种代码,最好在 main 函数最后等待所有 goroutine 执行完成,方法很多了,可以 Sleep,可以 sync.WaitGroup 等等。
#1
但是我只仅仅调换了下 sleep 和 print 语句的先后顺序,就能打印到 99 了。
#2