关于goroutine的问题,求质数的案例

SamuelSue · · 1212 次点击
感谢回答,但是还是没太懂,要的效果就是让所有的`PrimeNum`执行完毕后(`exitChan写满`)然后再从`resChan`中取出结果数据。类似的思路是这样: ```go func main() { var exitChan = make(chan bool, 4) var resChan = make(chan int, 4) for i := 0; i < 4; i++ { go func(n int) { resChan <- n exitChan <- true }(i) } for i := 0; i < 4; i++ { fmt.Println(<-exitChan) // 等待4个goroutine退出 } close(resChan) for { // 读取resChan的数据 if res, ok := <-resChan; !ok { break } else { fmt.Println("res:", res) } } } ``` 这和那个求质数的思路是一样的,但是这样就不会报deadlock。
#2
更多评论
polaris
社区,需要你我一同完善!
如果去掉 go func,在所有执行完之前,最后的 `v, ok := <- resChan` 没机会执行到
#1
哦!!明白了,因为`resChan`的缓冲容量太少了,每个goroutine写满了`resChan`,要等待`<-resChan`,但是main goroutine的取出`resChan`没有机会执行,所以死锁了.
#3