Go 言語では、 goroutine を使用してタスクを同時に実行できます。sync.WaitGroup は、 goroutine のグループの完了を待つために使用される同期メカニズムです。ただし、PHP Editor Banana は、場合によっては、sync.WaitGroup で goroutine を使用すると、一貫性のない結果が生じる可能性があることを発見しました。この問題は複数のゴルーチンが同時にシェア変数を変更する場合によく発生しますが、ゴルーチンの実行順序が不定であるため、最終的な結果に不整合が生じる可能性があります。この記事では、この問題の原因を調査し、ゴルーチン間の結果の一貫性を確保するためのいくつかの解決策を提供します。
ゴルーチン(Go言語)を使って、任意の整数i
以下の素数の数を数えようとしています。
たとえば、i
が 100 の場合、結果は 25
になります。
以下は私の現在の実装です:
リーリーこのプログラムを実行すると、より小さい i
値 (最大約 1000)
ただし、i
の値が大きい場合、結果は一貫性がなく、不正確になります。
#i の値が大きくなるにつれて結果のばらつきが大きくなります。これは何が原因でしょうか?一貫性を持たせて正しくする方法はありますか?
*pr = 1)。共有変数の前後にミューテックスを追加すると修正されます (
mu.Lock()、mu.Unlock())。
リーリー
出力:リーリー
以上がgoroutine を sync.WaitGroup とともに使用すると、一貫性のない結果が発生しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。