Go主协程如何等其余协程完再操作?

Go语言中,主协程(主goroutine)可以通过sync.WaitGroup来等待其他的goroutine完成。sync.WaitGroup是一个等待组,提供了等待一组goroutine完成的能力。

在启动一个新的goroutine时,可以调用WaitGroup.Add(1)来增加等待的goroutine数量。在goroutine完成时,可以调用WaitGroup.Done()来减少等待的goroutine数量。在主goroutine中,可以调用WaitGroup.Wait()来阻塞,直到所有的goroutine都调用了Done()Wait()函数才会返回,然后主goroutine可以继续执行。

以下是一个使用sync.WaitGroup的例子:

package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {
    var wg sync.WaitGroup

    for i := 0; i < 5; i++ {
        wg.Add(1)
        go func(i int) {
            defer wg.Done()
            time.Sleep(time.Second * time.Duration(i))
            fmt.Printf("Goroutine %d finished\n", i)
        }(i)
    }

    fmt.Println("Waiting for all goroutines to finish")
    wg.Wait()
    fmt.Println("All goroutines finished")
}

在这个例子中,我们启动了5个goroutine,并且每个goroutine在启动时都调用wg.Add(1)来增加等待的数量。每个goroutine在完成时都调用defer wg.Done()来减少等待的数量。在主goroutine中,我们调用wg.Wait()来等待所有的goroutine完成。

发表评论

后才能评论