在一些场景下需要同时让多个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")
}
原标签已从 2013-07-27 存档快照 恢复。本文按原站快照恢复排版,并接回已核实的本地图片。查看恢复说明