ホームページ >バックエンド開発 >Golang >WaitGroup.Done にはポインターを使用し、WaitGroup.Add と WaitGroup.Wait には使用しないのはなぜですか?

WaitGroup.Done にはポインターを使用し、WaitGroup.Add と WaitGroup.Wait には使用しないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-20 00:28:02818ブラウズ

Why Use a Pointer for WaitGroup.Done but Not for WaitGroup.Add and WaitGroup.Wait?

WaitGroups リファレンスのポインターと変数

同期パッケージでは、関数 Add、Done、および Wait はすべて、WaitGroup へのポインターによって呼び出されます。

  • Add は指定されたデルタだけ待機カウントを増分します。
  • Done は待機カウントを減分します。
  • 待機カウントが 0 になるまでブロックを待機します。

提供されたコード スニペットでは、Done 関数はポインター変数を使用して呼び出されますが、Add 関数と Wait 関数は (ポインターではなく) 変数を使用して呼び出されます。

ただし、3 つの関数はすべて同じ WaitGroup value で呼び出されます。

  • wg 変数は sync.WaitGroup の値として宣言されていますが、Add 、Done、および Wait メソッドは、逆参照演算子 () を使用して wg (wg) のアドレスで呼び出されます。
  • これは、3 つの関数すべてが同じ基になる WaitGroup 値で動作していることを意味します。
  • 唯一の違いは、正しい WaitGroup 値が変更されていることを確認するために、wg のアドレスで Done が呼び出されることです。

以上がWaitGroup.Done にはポインターを使用し、WaitGroup.Add と WaitGroup.Wait には使用しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。