原子LoadInt32/StoreInt32 (64)
原子記憶體操作保證多個goroutine 對共享變數的衝突存取依定義的順序發生,保證資料的一致性。 sync/atomic 套件為各種資料類型提供原子載入和儲存操作,包括 int32 和 int64。
理解差異
int64(&sharedA) 和atomic。 LoadInt64(&sharedA) 執行原子載入。然而,後者明確地使用sync/atomic套件來確保記憶體排序。當存取可能被多個 goroutine 同時修改的共享變數時,這一點很重要。
使用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 操作可確保多個 Goroutines 並發修改sharedA 和sharedB,而不會導致資料爭用。 LoadInt64 確保主 Goroutine 一致地從這些共享變數中讀取最新值。
以上是何時以及為什麼應該在 Go 中使用 `atomic.LoadInt64`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!