Go语言关闭频道实验一枚

Go by 达达 at 2012-09-11

在一些场景下需要同时让多个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")
}