| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- package atomic
- import (
- "sync/atomic"
- )
- // AtomicBool alias leverages a 32-bit integer CAS
- type AtomicBool int32
- // NewAtomicBool creates an AtomicBool with given default value
- func NewAtomicBool(value bool) *AtomicBool {
- ab := new(AtomicBool)
- ab.Set(value)
- return ab
- }
- // Loads the bool value atomically
- func (ab *AtomicBool) Get() bool {
- return atomic.LoadInt32((*int32)(ab)) != 0
- }
- // Sets the bool value atomically
- func (ab *AtomicBool) Set(value bool) {
- if value {
- atomic.StoreInt32((*int32)(ab), 1)
- } else {
- atomic.StoreInt32((*int32)(ab), 0)
- }
- }
- // CompareAndSet sets value to new if current is equal to the current value. If the new value is
- // set, this function returns true.
- func (ab *AtomicBool) CompareAndSet(current, new bool) bool {
- var o, n int32
- if current {
- o = 1
- }
- if new {
- n = 1
- }
- return atomic.CompareAndSwapInt32((*int32)(ab), o, n)
- }
|