アトミック操作: Go の LoadInt32/StoreInt32 を理解する
アトミック操作は、複数間で変数を安全に共有できるようにするため、同時プログラミングにとって重要です。ゴルーチン。 Go はこの目的のために sync/atomic を提供しますが、LoadInt32 と StoreInt32 の違いはすぐには分からないかもしれません。
同時実行コードで共有変数を使用する場合は、次のシナリオを考慮することが重要です。
<code class="go">import "sync/atomic" var sharedA int64 var sharedB *int64 // Concurrent code tmpVarA := sharedA tmpVarB := *sharedB</code>
この例では、sharedA とsharedB の両方が同時にアクセスされます。アトミック操作を使用しないと、tmpVarA と tmpVarB が矛盾した値を保持する可能性があります。これは、CPU の命令の順序がゴルーチンごとに異なり、予期しない結果が生じる可能性があるためです。
この問題に対処するために、Go は sync/atomic パッケージを提供します。これを前の例に組み込む方法は次のとおりです。
<code class="go">tmpVarA := atomic.LoadInt64(&sharedA) tmpVarB := atomic.LoadInt64(sharedB)</code>
LoadInt64 関数は、sharedA とsharedB の値をそれぞれ tmpVarA と tmpVarB にアトミックにロードします。これにより、値が常にアトミックに取得され、ゴルーチン間での一貫性が維持されます。
要約すると、LoadInt32/StoreInt32 などのアトミック操作は、同時実行 Go プログラムの共有変数への同期アクセスに不可欠です。これらは、変数が一貫性のある予測可能な方法で読み書きされることを保証し、競合状態やデータ破損を防ぎます。
以上がLoadInt32 と StoreInt32 は Go の共有変数への安全な同時アクセスをどのように確保しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。