使用 sync 包中的 WaitGroup 对象,对协程量计数,通过标记协程完成数量确定协程是否全部完成。
package main
import (
"fmt"
"math/rand"
"sync"
"time"
)
var wg sync.WaitGroup
func Pi(i int){
// 执行结束前提示协程关闭一个
defer wg.Done()
// 设置协程每次不定时长的等待
wait_time := rand.Intn(5)
time.Sleep(time.Second * time.Duration(wait_time))
fmt.Printf("runing %v (sleep %v s)\n", i, wait_time)
}
func main() {
for i:=1; i<5; i++ {
wg.Add(1)
// 创建协程
go Pi(i)
}
// 等待协程结束
wg.Wait()
}