原子 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中文网其他相关文章!