考虑两个例子:
第一:
package main
import "fmt"
func main() {
c := make(chan int)
go func(){
c <- 1
}()
go func(){
c <- 2
}()
select {
case <-c:
fmt.Println("<-c:", <-c)
fmt.Println("<-c:", <-c)
}
}
据我所知,应该发生的情况是:两个 goroutine 生成并写入同一个通道,其中一个阻塞并等待主 goroutine 读取。
但我不明白第二个 goroutine 会发生什么。它是否会阻塞,因为通道是无缓冲的,并且它在设计上不能容纳两个值。
有了这篇文章,我陷入了僵局。我在这里发现了类似的问题。
如果是这样,那么这段代码是如何运行的呢?
package main
import "fmt"
func main() {
c := make(chan int)
go func(){
c <- 1
}()
go func(){
c <- 2
}()
select {
case forget := <-c:
fmt.Println("forget:", forget)
fmt.Println("<-c:", <-c)
}
}
弑天下
相关分类