github.com/swiftstack/proxyfs@v0.0.0-20201223034610-5434d919416e/bucketstats/atomic_linux_arm.go (about) 1 // Per bugs in the 32-bit versions of 64-bit sync/atomic API implementations, 2 // this file implements those operations by means of a global lock. 3 4 package bucketstats 5 6 import "sync" 7 8 var ( 9 atomicMutex sync.Mutex 10 ) 11 12 func atomicAddUint64(addr *uint64, val uint64) { 13 atomicMutex.Lock() 14 prevVal := *addr 15 *addr = prevVal + val 16 atomicMutex.Unlock() 17 } 18 19 func atomicIncUint64(addr *uint64) { 20 atomicMutex.Lock() 21 prevVal := *addr 22 *addr = prevVal + 1 23 atomicMutex.Unlock() 24 } 25 26 func atomicLoadUint64(addr *uint64) (val uint64) { 27 atomicMutex.Lock() 28 val = *addr 29 atomicMutex.Unlock() 30 return 31 } 32 33 func atomicStoreUint64(addr *uint64, val uint64) { 34 atomicMutex.Lock() 35 *addr = val 36 atomicMutex.Unlock() 37 }