深入浅出 Go 并发协同等待利器:sync.WaitGroup
warning:
这篇文章距离上次修改已过190天,其中的内容可能已经有所变动。
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
fmt.Printf("Worker %d starting\n", id)
// 模拟工作时间
time.Sleep(2 * time.Second)
fmt.Printf("Worker %d done\n", id)
// 当工作完成时,通知 WaitGroup
wg.Done()
}
func main() {
var wg sync.WaitGroup
// 添加工人数量
for i := 1; i <= 5; i++ {
wg.Add(1)
go worker(i, &wg)
}
// 等待所有工人完成工作
wg.Wait()
fmt.Println("All workers have finished")
}
这段代码使用了sync.WaitGroup
来同步并发执行的 goroutines。主函数中,我们启动了5个工人(goroutines),每个工人在完成工作后都会调用wg.Done()
以告知sync.WaitGroup
工作已完成。wg.Wait()
会阻塞主函数,直到所有工人都完成工作。这是一个典型的使用场景,对于学习并发编程的开发者来说,这是一个很好的例子。
评论已关闭