一组协程完成后需要通知其他协程,可以怎么办?
题目来源:字节跳动
答案:
本题有两种方法:
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 中发送数据,激活等待中的协程。