123456789101112131415161718192021222324252627282930313233343536 |
- package syncx
- import (
- "sync/atomic"
- "time"
- )
- // An AtomicDuration is an implementation of atomic duration.
- type AtomicDuration int64
- // NewAtomicDuration returns an AtomicDuration.
- func NewAtomicDuration() *AtomicDuration {
- return new(AtomicDuration)
- }
- // ForAtomicDuration returns an AtomicDuration with given value.
- func ForAtomicDuration(val time.Duration) *AtomicDuration {
- d := NewAtomicDuration()
- d.Set(val)
- return d
- }
- // CompareAndSwap compares current value with old, if equals, set the value to val.
- func (d *AtomicDuration) CompareAndSwap(old, val time.Duration) bool {
- return atomic.CompareAndSwapInt64((*int64)(d), int64(old), int64(val))
- }
- // Load loads the current duration.
- func (d *AtomicDuration) Load() time.Duration {
- return time.Duration(atomic.LoadInt64((*int64)(d)))
- }
- // Set sets the value to val.
- func (d *AtomicDuration) Set(val time.Duration) {
- atomic.StoreInt64((*int64)(d), int64(val))
- }
|