package main
func m() {
c1 := make(chan int, 1)
c2 := make(chan int, 1)
go func() {
c1 <- 1
c2 <- 1
}()
select {
case <-c1:
case <-c2:
println("no way")
}
}
func main() {
for i := 0; i < 1000000; i++ {
m()
}
}
有两个频道c1
,c2
。
我们正在向goroutine中的c1
和c2
发送数据。我们有一个select
来接收来自这两个频道的数据并返回。
问题是:我们首先向c1
发送数据,并在大多数情况下首先从c1
收到数据。但有时我们会先向c2
发送c1
。为什么呢?