| 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)
 
- }
 
 
  |