go并发:用channel实现等待组

一,代码:

// 入口函数
func main() {

    //无缓冲的channel
    ch:=make(chan int)

    go func() {
        //<-ch
        for i:=1; i<=5; i++ {
            time.Sleep(time.Millisecond)
            fmt.Println(i)
        }
        ch <- 0   //子协程结束前,向channel写入0
    }()

    go func() {

        for i:=1; i<=5; i++ {
            time.Sleep(time.Millisecond)
            fmt.Println(i*10)
        }
        ch <- 0   //子协程结束前,向channel写入0
    }()

    //主协程中,尝试从channel读取2个元素
    for i:=0;i<2;i++ {
        <-ch
    }
}

二,说明:

在主协程中,无法从channel对象中读取到数据时,会进入阻塞状态

三,运行效果:

$ go run main.go 
1
10
20
2
3
30
40
4
5
50

 

posted @ 2025-03-09 13:21  刘宏缔的架构森林  阅读(21)  评论(0)    收藏  举报