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