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  }