ホームページ > バックエンド開発 > Golang > golang 関数は、WaitGroup を通じて goroutine が完了するのをどのように待機しますか?

golang 関数は、WaitGroup を通じて goroutine が完了するのをどのように待機しますか?

王林
リリース: 2024-05-01 09:51:01
オリジナル
702 人が閲覧しました

WaitGroup は、Goroutine の実行を調整するための Go の同期メカニズムです。これを使用して、メイン goroutine が実行を続行する前に goroutine のグループが完了するのを確実に待機します。具体的な使用法: WaitGroup インスタンスを作成し、待機するゴルーチンの数を示す初期カウンターを設定します。待機するゴルーチンごとに、wg.Add(1) を呼び出してカウンターをインクリメントします。 goroutine が完了したら、wg.Done() を呼び出してカウンターをデクリメントします。最後に、メインのゴルーチンは wg.Wait() を呼び出して、すべてのゴルーチンが完了するまで自身をブロックします。

golang 関数は、WaitGroup を通じて goroutine が完了するのをどのように待機しますか?

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 が完了するのを待ちます。

rree

以上がgolang 関数は、WaitGroup を通じて goroutine が完了するのをどのように待機しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート