select
来源:11-4 用select进行调度

五栋一哥
2020-03-26
老师,为什么这里打出来的都是case w <- n : 的情况?我已经把前面的time.sleep去掉了,c1,c2应该是有数据的,为什么select不会执行相关的case?执行的都是w <- n这个case。
写回答
2回答
-
三个分支都会选中,这里因为一开始有n:=0,所以送给worker的数据永远是0。
我们把n:=0移到for的前面就可以看到c1,c2送过来的数据了。
032020-03-28 -
慕侠5029079
2020-10-10
但是我把内容输出的时候,是有进入其他case的,是因为我的代码错了?
func main() {
var c1, c2 = generator(), generator()
w := createWorker(0)
for {
n := 0
select {
case n = <-c1:
fmt.Println("FIRST CASE")
case n = <-c2:
fmt.Println("SECOND CASE")
case w <- n:
fmt.Println("THIRD CASE")
}
}
}go run xxx.go > out.txt
在out.txt能看到三种情况都有
012020-10-10
相似问题
关于select的选择执行的问题
回答 1
关于select的问题
回答 1