【发布时间】:2020-06-02 15:58:19
【问题描述】:
在所有 goroutines bing 发出后,如何使用 goroutine 按顺序打印数字?
这是随机打印数字的代码:
func main() {
var wg sync.WaitGroup
wg.Add(10)
for i := 1; i <= 10; i++ {
go func(i int) {
defer wg.Done()
fmt.Printf("i = %d\n", i)
}(i)
}
wg.Wait()
发射 goroutine 以打印如下数字,这不是我想要的解决方案。
func main() {
var wg sync.WaitGroup
for i := 1; i <= 10; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
fmt.Printf("i = %d\n", i)
}(i)
wg.Wait()
}
我希望所有的 goroutine 都被发出,然后让它们按顺序打印数字。
【问题讨论】:
-
你的问题没有多大意义。您要求并行执行某些操作(因此是 go 函数)但它们的行为是串行的?
-
您可以使用 goroutines 以随机顺序填充切片,然后对其进行排序并在主线程中打印。您可以使用单独的等待组或阻塞通道使所有 goroutine 在创建后立即阻塞,然后在它们完成后解除阻塞,以便它们同时启动,但这并不能保证顺序。基本上:您希望它们并行运行,还是希望它们按顺序运行?