Atomic LoadInt32/StoreInt32 (64)
アトミック メモリ操作により、複数のゴルーチンから共有変数への競合するアクセスが定義された順序で発生することが保証されます。 、データの一貫性を確保します。 sync/atomic パッケージは、int32 や int64 などのさまざまなデータ型に対するアトミックなロードおよびストア操作を提供します。
違いを理解する
int64(&sharedA) とアトミックの両方。 LoadInt64(&sharedA) はアトミックロードを実行します。ただし、後者は明示的に sync/atomic パッケージを使用してメモリの順序を確保します。これは、複数のゴルーチンによって同時に変更される可能性のある共有変数にアクセスする場合に重要です。
LoadInt64 を使用すると、次のことが保証されます。
使用例
アトミック ロードとストアは通常、次のようなシナリオで使用されます。
次の例を考えてみましょう:
<code class="go">package main import "sync/atomic" func main() { // Shared variables var sharedA int64 var sharedB *int64 // Concurrent code go func() { // Set sharedA to 10 atomic.StoreInt64(&sharedA, 10) }() go func() { // Set sharedB to a new value sharedB = new(int64) *sharedB = 20 }() // Main goroutine reads shared variables tmpVarA := atomic.LoadInt64(&sharedA) tmpVarB := atomic.LoadInt64(sharedB) // Print the values println(tmpVarA, *tmpVarB) }</code>
この例では、StoreInt64 オペレーションにより、複数のゴルーチンがデータ競合を引き起こすことなく、sharedA とsharedB を同時に変更することが保証されます。 LoadInt64 は、メインの goroutine がこれらの共有変数から最新の値を一貫して読み取ることを保証します。
以上がGo で「atomic.LoadInt64」を使用する必要があるのはいつ、なぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。