新学Go,这是《Go语言编程》里的一个例子,但是运行的结果却是:
Counting
应该有10个的
希望有大神看下怎么才能让goroutine不被阻塞
代码如下:
package main
import "fmt"
func Count(ch chan int) {
ch <- 1
fmt.Println("Counting")
}
func main() {
chs := make([]chan int, 10)
for i := 0; i < 10; i++ {
chs[i] = make(chan int)
go Count(chs[i])
}
for _, ch := range(chs) {
<-ch
}
}
package main import "fmt" func Count(ch chan int) { fmt.Println("Counting") ch <- 1 } func main() { chs := make([]chan int, 10) for i := 0; i < 10; i++ { chs[i] = make(chan int) go Count(chs[i]) } for _, ch := range chs { <-ch } }
多谢大佬,但为什么那两行换个位置就好了?
@jhssd: 先执行打印,再结束。
按你的写法,在主进程退出前,各个协程未必都执行完,所以打印出来的Counting个数是不确定的;
按楼上写法,确保了各个协程在主进程退出前都执行完,所以打印出来的Counting个数为10个。(逃