golang 等带多个协程结束
可以使用sync.WaitGroup来等待多个协程结束。
示例代码:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("Worker %d starting\n", id)
for i := 0; i < 5; i++ {
fmt.Printf("Worker %d: %d\n", id, i)
}
fmt.Printf("Worker %d done\n", id)
}
func main() {
var wg sync.WaitGroup
for i := 1; i <= 3; i++ {
wg.Add(1)
go worker(i, &wg)
}
wg.Wait()
fmt.Println("All workers done")
}
输出:
Worker 1 starting
Worker 2 starting
Worker 3 starting
Worker 2: 0
Worker 2: 1
Worker 2: 2
Worker 2: 3
Worker 2: 4
Worker 2 done
Worker 3: 0
Worker 3: 1
Worker 3: 2
Worker 3: 3
Worker 3: 4
Worker 3 done
Worker 1: 0
Worker 1: 1
Worker 1: 2
Worker 1: 3
Worker 1: 4
Worker 1 done
All workers done
原文地址: http://www.cveoy.top/t/topic/uia 著作权归作者所有。请勿转载和采集!