n°达达的主页1234n.com个人博客 / 旧文存档
← 返回文章
2012-09-11 / 达达

Go语言关闭频道实验一枚

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")
}

原标签已从 2013-07-27 存档快照 恢复。本文按原站快照恢复排版,并接回已核实的本地图片。查看恢复说明