| 1234567891011121314151617181920212223242526272829 |
- package signal
- import (
- "sync"
- "sync/atomic"
- )
- type Once struct {
- m sync.Mutex
- done uint32
- }
- func (o *Once) Do(f func()) {
- if atomic.LoadUint32(&o.done) == 1 {
- return
- }
- o.m.Lock()
- defer o.m.Unlock()
- if o.done == 0 {
- atomic.StoreUint32(&o.done, 1)
- f()
- }
- }
- func (o *Once) Reset() {
- o.m.Lock()
- defer o.m.Unlock()
- atomic.StoreUint32(&o.done, 0)
- }
|