小编shi*_*gdo的帖子

为什么golang select语句不随机选择一个case

这类似于go Tutorial select statements,但我没有从该帖子中得到答案。所以我就在这里问了。谢谢回答。

http://tour.golang.org/concurrency/5中,似乎“case c <- x:”总是准备就绪,这意味着这种情况不会阻塞select语句。

基于“A select 阻塞直到其中一个 case 可以运行,然后执行该 case。如果多个 case 都准备好了,它会随机选择一个。”,当“case <-quit:”也准备好时,select 语句应该从“case c <- x:”和“case <-quit:”中随机选择。但程序总是进入“case <-quit:”情况。

我还将选择块更改为如下所示。然后在前 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 = …
Run Code Online (Sandbox Code Playgroud)

select go goroutine

4
推荐指数
1
解决办法
4150
查看次数

标签 统计

go ×1

goroutine ×1

select ×1