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()
}
}
有两个 channel c1
,c2
。
我们在 goroutine 中将数据发送到 c1
和 c2
。我们有一个 select
来接收来自这两个 channel 的数据并返回。
问题是:在大多数情况下,我们首先将数据发送到c1
并首先从c1
接收。但有时我们先从 c2
接收,然后先发送到 c1
。为什么?
最佳答案
关于go - 向两个 channel 发送数据,第二个 channel 有时可能会先接收到数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50553796/