【发布时间】:2016-07-20 01:08:01
【问题描述】:
这类似于go tutorial select statement,但我没有从那个帖子中得到答案。所以我在这里问。感谢您的回答。
在http://tour.golang.org/concurrency/5 中,似乎“case c
基于语句“A select阻塞直到它的一个case可以运行,然后它执行那个case。如果多个都准备好了,它会随机选择一个。”,当“case
我还将选择块更改为如下所示。然后在前 10 次循环中,程序随机打印 1-6,但程序退出一次(第 11 次输出)退出通道的值为 0。
我的问题是,如果准备好的案例是随机选择的,那么为什么第11个选择总是退出案例。
select {
case c <- 1:
x, y = y, x+y
case c <- 2:
x, y = y, x+y
case c <- 3:
x, y = y, x+y
case c <- 4:
x, y = y, x+y
case c <- 5:
x, y = y, x+y
case c <- 6:
x, y = y, x+y
case <-quit:
fmt.Println("quit")
return
}
【问题讨论】:
-
但是
c <- x在quit的示例中未准备就绪(基于您链接到的示例)。您是否使用与游览相同的代码? -
@JimB 我只知道 c 通道是无缓冲的。谢谢!