70、掌握Go语言sync.WaitGroup:轻松管理并发任务协作
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)
wg.Done() // 当工作完成时,通知WaitGroup
}
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
来同步5个工人的并发执行。每个工人在开始工作前增加WaitGroup的计数,工作完成后通过wg.Done()
方法减少计数。wg.Wait()
方法会阻塞,直到WaitGroup的计数降至0,表示所有工人都完成了工作。这是管理并发任务和资源协调的一个简单例子。
评论已关闭