1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package syncx
- import "sync/atomic"
- // An AtomicBool is an atomic implementation for boolean values.
- type AtomicBool uint32
- // NewAtomicBool returns an AtomicBool.
- func NewAtomicBool() *AtomicBool {
- return new(AtomicBool)
- }
- // ForAtomicBool returns an AtomicBool with given val.
- func ForAtomicBool(val bool) *AtomicBool {
- b := NewAtomicBool()
- b.Set(val)
- return b
- }
- // CompareAndSwap compares current value with given old, if equals, set to given val.
- func (b *AtomicBool) CompareAndSwap(old, val bool) bool {
- var ov, nv uint32
- if old {
- ov = 1
- }
- if val {
- nv = 1
- }
- return atomic.CompareAndSwapUint32((*uint32)(b), ov, nv)
- }
- // Set sets the value to v.
- func (b *AtomicBool) Set(v bool) {
- if v {
- atomic.StoreUint32((*uint32)(b), 1)
- } else {
- atomic.StoreUint32((*uint32)(b), 0)
- }
- }
- // True returns true if current value is true.
- func (b *AtomicBool) True() bool {
- return atomic.LoadUint32((*uint32)(b)) == 1
- }
|