github.com/lingyao2333/mo-zero@v1.4.1/core/syncx/atomicduration.go (about) 1 package syncx 2 3 import ( 4 "sync/atomic" 5 "time" 6 ) 7 8 // An AtomicDuration is an implementation of atomic duration. 9 type AtomicDuration int64 10 11 // NewAtomicDuration returns an AtomicDuration. 12 func NewAtomicDuration() *AtomicDuration { 13 return new(AtomicDuration) 14 } 15 16 // ForAtomicDuration returns an AtomicDuration with given value. 17 func ForAtomicDuration(val time.Duration) *AtomicDuration { 18 d := NewAtomicDuration() 19 d.Set(val) 20 return d 21 } 22 23 // CompareAndSwap compares current value with old, if equals, set the value to val. 24 func (d *AtomicDuration) CompareAndSwap(old, val time.Duration) bool { 25 return atomic.CompareAndSwapInt64((*int64)(d), int64(old), int64(val)) 26 } 27 28 // Load loads the current duration. 29 func (d *AtomicDuration) Load() time.Duration { 30 return time.Duration(atomic.LoadInt64((*int64)(d))) 31 } 32 33 // Set sets the value to val. 34 func (d *AtomicDuration) Set(val time.Duration) { 35 atomic.StoreInt64((*int64)(d), int64(val)) 36 }