Go での変数の割り当て: それはアトミックですか?
共有データへの同時アクセスは、マルチスレッド アプリケーションで予期しない結果を引き起こす可能性があります。 Go では、変数の割り当ては本質的にアトミックではありません。つまり、同じ変数にアクセスする複数のスレッドが相互に干渉する可能性があります。
質問:
2 つのスレッドが同時に変更する場合構造体の文字列フィールド、期待される動作は何ですか?
答え:
この状況では、フィールドに常に によって割り当てられた文字列が含まれることを保証できません。スレッドの 1 つ。両方のスレッドが変数に同時にアクセスできるため、フィールドに予期しない値が発生する可能性があります。
解決策:
Go でアトミック操作を確実にするには、同期を利用する必要があります。 /atomic パッケージ。 sync/atomic パッケージは、値をアトミックに更新するためのプリミティブを提供し、一度に 1 つのスレッドだけが特定の変数にアクセスできるようにします。
Go メモリ モデル:
The Goメモリ モデル (GMM) は、Go でのメモリの順序付けと同期に関する包括的なガイドラインを提供します。 GMM によると:
以上が2 つのスレッドが構造体の文字列フィールドを変更する場合、Go での変数の割り当てはアトミックですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。