正確なカウントのための待機グループの配置
同時プログラミングでは、sync.WaitGroup 型はゴルーチンを調整するための同期プリミティブとして機能します。 wg.Wait() へのブロッキング呼び出しを続行する前に完了する必要があるタスクの数を追跡します。
wg.Add() の適切な配置
Toタスクを正確にカウントするには、後で wg.Done() を呼び出す goroutine を起動する前に、wg.Add(1) を呼び出すことが重要です。この配置により、起動されたすべてのゴルーチンが完了するまで、メインのゴルーチンが wg.Wait() でブロックされることが保証されます。
代替配置の結果
コード例で示すように、 wg.Add(1) をゴルーチン内に配置すると、wg.Wait() が途中で完了する可能性があります。これは、同じゴルーチン内で、wg.Add(1) の直後に wg.Done() が呼び出され、すべてのタスクが完了する前にメインのゴルーチンが実行を再開するために発生します。
Deterministic Completion
ゴルーチンの起動前に wg.Add() が正しく配置されている場合、メインのゴルーチンは for ループが終わるまで wg.Wait() に到達できません。これにより、wg.Add() が正確に 100 回呼び出されることになり、wg.Done() が 100 回呼び出されるまで wg.Wait() がブロックされます。
Alternatives
別の方法として、ループの反復回数が事前にわかっている場合は、ループの前に wg.Add(100) を呼び出すことができます。ただし、ループ内で条件付きスキップが行われないことを前提としているため、このアプローチは慎重に使用する必要があります。
ベスト プラクティス
sync.WaitGroup を一貫して信頼性の高い方法で使用するには、次のガイドラインに従ってください:
以上がGo の `sync.WaitGroup` で正確にカウントするには `wg.Add()` をどこに配置する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。