package main
import (
"fmt"
"sync"
"time"
)
func worker(id int,wg *sync.WaitGroup){
defer wg.Done();
fmt.Printf("Worker %d started\n", id)
time.Sleep(2*time.Second)
fmt.Printf("Worker %d completed\n", id)
}
func main(){
var wg sync.WaitGroup
fmt.Println("Main goroutine started")
for i:=1;i<=3;i++{
wg.Add(1)
go worker(i,&wg)
}
wg.Wait()
fmt.Println("Main goroutine completed")
}
//wg.Wait()代表所有的协程的结束
//wg.Add(1)指定要等待的 goroutine 的数量,
//defer wg.Done();某一个协程结束任务了
//意思就是:在main函数中创建了三个work协程。然后每一个协程执行的时候休眠两秒.time.Sleep(2*time.Second)
//每一个协程结束后调用 wg.Done() 表示任务完成。
//wg.Wait()是等待所有的work协程执行完毕后,就调用。然后输出主man里面的内容
//defer wg.Done();.中defer下是因为等待这个协程执行完毕后,就结束这个协程.
//什么情况下会用到var wg sync.WaitGroup
/*
当我们需要等待多个 goroutine 执行完毕时,可以使用 sync.WaitGroup 来实现协同等待。
*/