package main
import (
"fmt"
"sync"
"time"
)
/*等待组API介绍*/
func main071() {
var wg sync.WaitGroup
fmt.Println(wg)
//向等待组添加一个协程(注册)
wg.Add(1)
//从等待组减掉一个协程(注销)
wg.Done()
//阻塞等待至等待组中的协程数归零
wg.Wait()
}
/*
·分别使用Ticker和Timer创建耗时协程A,B
·将A,B,C两个协程加入等待组
·A,B,C结束时从等待组注销
·主协程阻塞至等待组内协程数归零
*/
func main() {
//声明等待组
var wg sync.WaitGroup
//每开辟一个协程就向等待组中+1
wg.Add(1)
go func() {
fmt.Println("协程A开始工作")
time.Sleep(3 * time.Second)
fmt.Println("协程A over")
//协程结束,从等待组中注销(协程数-1)
wg.Done()
}()
//每开辟一个协程就向等待组中+1
wg.Add(1)
go func() {
fmt.Println("协程B开始工作")
//timer := time.NewTimer(3 * time.Second)
//<- timer.C
<-time.After(5 * time.Second)
fmt.Println("协程B over")
//协程结束,从等待组中注销(协程数-1)
wg.Done()
}()
//每开辟一个协程就向等待组中+1
wg.Add(1)
go func() {
fmt.Println("协程C开始工作")
ticker := time.NewTicker(time.Second)
for i := 0; i < 4; i++ {
<-ticker.C
}
ticker.Stop()
fmt.Println("协程C over")
//协程结束,从等待组中注销(协程数-1)
wg.Done()
}()
//阻塞等待wg中的协程数归零
wg.Wait()
fmt.Println("main over")
}