请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于channel的疑问

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
代码如下:
package main
 
import (
   "fmt"
   "runtime"
)
 
func test(c chan bool, n int) {
   x := 0
   for i := 0; i < 100000000; i++ {
      += i
   }
 
   fmt.Println(n, x)
   if == 5 {
      c <- true
   }
}
 
func main() {
   runtime.GOMAXPROCS(1)
   c := make(chan bool)
 
   for i := 0; i < 10; i++ {
      go test(c, i)
   }
   <-c
   fmt.Println("main ok")
}

执行结果如下:

9 4999999950000000

0 4999999950000000

1 4999999950000000

2 4999999950000000

3 4999999950000000

4 4999999950000000

5 4999999950000000

main ok

请分析为什么结果第一行是9 4999999950000000?当

if n == 9 {
     c <- true
}时,执行结果为什么是:

9 4999999950000000

main ok ?

多个goroutine共用一个chan是否会有问题?

谢谢!


正在回答

插入代码

1回答

多个goroutine一起并发执行,我们对他们的顺序不要进行假设。即使在一定版本一定环境下有确定性。
这个例子中不论第一行是谁,或者输出多少行再退出,都可以。我们的代码也要在所有情况下运行正确。
多个goroutine共用channel是go语言强大的地方,可以去这样使用来简化开发。

0 回复 有任何疑惑可以回复我~
  • 提问者 AllenChen318 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-02-27 16:37:41
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号