メモリ バリアに対する WaitGroup.Wait() の影響
WaitGroup.Wait() は Go プログラミング言語の関数で、次の時点までブロックします。 WaitGroup オブジェクトのカウントが 0 に達します。 Go フォーラムでの最近の議論で、WaitGroup.Wait() がメモリ バリアを暗示しているかどうかという質問が生じました。
この質問に対する答えは「はい」です。 wg.Wait() と wg.Done() の間には、事前発生関係が確立されています。これは、wg.Wait() が戻った後に共有変数に加えられた変更は、以前に wg.Done() を発行したスレッドに表示されることを意味します。
これは、WaitGroup が単一の項目で使用されている場合でも当てはまります。基礎となるアーキテクチャ (x86、x64、または ARM) により、メモリ バリアが確実に維持されます。
ドキュメントにメモリ バリアについて明示的に言及されていないという事実は、やや不可解です。ただし、事前発生関係は単にドキュメントによって暗示されているだけではなく、言語セマンティクスと基礎となるハードウェア アーキテクチャに固有のものであることに注意することが重要です。
これは、開発者が WaitGroup.Wait() を利用して提供できることを意味します。メモリアクセスの一貫した順序付けにより、同時スレッドが共有データに安全にアクセスできるようになります。
以上がGo の WaitGroup.Wait() はメモリ バリアを保証しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。