一组协程完成后需要通知其他协程,可以怎么办?

本文阅读 1 分钟
首页 golang 正文
题目序号:339
题目来源:字节跳动
频次:3495

答案:大布丁

本题有两种方法:
1、使用全局的 sync.waitGroup 来控制协程执行个数,如下图代码所示

package main

import (
    "fmt"
    "sync"
    "time"
)

var wg sync.WaitGroup

func w() {
    defer wg.Done()
    for i := 10; i < 20; i++ {
        fmt.Printf("%v ", i)
        time.Sleep(1 * time.Second)
    }
}

func main() {
    wg.Add(3)
    for i := 0; i < 3; i++ {
        go w()
    }
    wg.Wait()
    fmt.Printf("
")
    for i := 11; i <= 15; i++ {
        fmt.Printf("%v ", i)
        time.Sleep(1 * time.Second)
    }
}

2、也可以使用 channel 进行通信,如果一组协程都执行完毕,则向 channel 中发送数据,激活等待中的协程。

本文来自投稿,不代表本站立场,如若转载,请注明出处:
了解中间件吗?有什么好处?
« 上一篇 09-17
Go 高并发的特点
下一篇 » 09-17

发表评论

发表评论