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  }