Go语言关闭频道实验一枚
在一些场景下需要同时让多个goroutine一起退出,最低限度需要几个channel来做这件事情呢?
下面是一则关闭频道的实验,实验中运行两个goruntine阻塞在channel c的消息等待,然后在主函数中关闭channel c,从实验结果可以看出两个goruntine都正确的从阻塞的位置继续运行下去。
所以结论是,只需要通过关闭一个公共的channel就可以让多个goruntine一起退出。
下面是实验代码,点击运行代码:
package main import "fmt" func main() { a := make(chan int) b := make(chan int) c := make(chan int) go func() { <-c fmt.Println("A") a <- 1 }() go func() { <-c fmt.Println("B") b <- 1 }() close(c) <-a <-b fmt.Println("End") }