首页 新闻 搜索 专区 学院

求助!!!Go channel的问题

0
悬赏园豆:100 [已解决问题] 解决于 2017-07-03 21:30

新学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
}
}

go
jhssd的主页 jhssd | 初学一级 | 园豆:112
提问于:2017-06-24 20:19
< >
分享
最佳答案
1
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
    }
}
收获园豆:50
幻天芒 | 高人七级 |园豆:36662 | 2017-06-24 23:42

多谢大佬,但为什么那两行换个位置就好了?

jhssd | 园豆:112 (初学一级) | 2017-06-25 00:29

@jhssd: 先执行打印,再结束。

幻天芒 | 园豆:36662 (高人七级) | 2017-06-25 16:53
其他回答(1)
0

按你的写法,在主进程退出前,各个协程未必都执行完,所以打印出来的Counting个数是不确定的;

按楼上写法,确保了各个协程在主进程退出前都执行完,所以打印出来的Counting个数为10个。(逃

收获园豆:50
Cloogo | 园豆:301 (菜鸟二级) | 2017-06-25 17:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册