WaitGroup は、Goroutine の実行を調整するための Go の同期メカニズムです。これを使用して、メイン goroutine が実行を続行する前に goroutine のグループが完了するのを確実に待機します。具体的な使用法: WaitGroup インスタンスを作成し、待機するゴルーチンの数を示す初期カウンターを設定します。待機するゴルーチンごとに、wg.Add(1) を呼び出してカウンターをインクリメントします。 goroutine が完了したら、wg.Done() を呼び出してカウンターをデクリメントします。最後に、メインのゴルーチンは wg.Wait() を呼び出して、すべてのゴルーチンが完了するまで自身をブロックします。
Go で WaitGroup を使用して Goroutine の完了を待つ方法
Go の WaitGroup
は、同期の一種 複数のゴルーチンの実行を調整するメカニズム。これにより、メインの goroutine は goroutine のグループが完了するまで待機できるようになり、実行を続行する前に関連するすべてのタスクが完了したことが保証されます。
使用法:
WaitGroup
インスタンスを作成し、待機するゴルーチンの数を示す初期カウンターを設定します。待機するゴルーチンごとに、wg.Add(1)
を呼び出してカウンターをインクリメントし、ゴルーチンが完了した後、wg.Done()
を呼び出してカウンターをデクリメントします。最後に、メインの goroutine は wg.Wait()
を呼び出して、すべての goroutine が完了するまで自身をブロックします。
コード サンプル:
package main import ( "fmt" "sync" ) var wg sync.WaitGroup func main() { // 创建一个需要等待 3 个 goroutine 完成的 WaitGroup wg.Add(3) // 创建 3 个 goroutine for i := 0; i < 3; i++ { go func(i int) { fmt.Printf("Goroutine %d started\n", i) // 模拟一些需要时间的工作 for j := 0; j < 10000; j++ {} fmt.Printf("Goroutine %d finished\n", i) // 通知 WaitGroup 该 goroutine 已完成 wg.Done() }(i) } // 等待所有 goroutine 完成 wg.Wait() fmt.Println("All goroutines have finished") }
実際のケース:
このコード サンプルは、複数のゴルーチンが実行される単純な Web サーバーをシミュレートします。リクエストの取り扱いを開始しました。サーバーをシャットダウンする前に goroutine が完了していることを確認するには、WaitGroup
を使用してすべての goroutine が完了するのを待ちます。
以上がgolang 関数は、WaitGroup を通じて goroutine が完了するのをどのように待機しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。