让我蛋疼的goroutine

thinkingbullet · · 3284 次点击
并行的程序执行顺序不可测
#2
更多评论
**你的代码看的我也挺蛋疼的** 当你运行`go f()`后,可以理解为新开了一条支线来跑`f()方法`,主线还在继续跑 分析你说的两种情况 1. Print在先 主线在执行Print时,支线在执行`c <- 0`,所以a还是空的,所以打印是空 2. <-在先 主线是阻塞状态,必须等管道c里有内容后才会继续执行 所以支线的`c <- 0`执行后,主线的`<-c`才会执行 主线`<-c`执行时,支线正在执行`a = "hello, world"` 然后主线就能正确打印出hello world了 这是假设所有执行的时间都一样的前提下 如果有某行代码需要执行时间比较长,那结果也会不同
#1
你开的chan是有缓冲的,不阻塞,结果就不可预测了。
#3