mirror of
				https://github.com/v2fly/v2ray-core.git
				synced 2025-10-31 01:39:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			30 lines
		
	
	
		
			369 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			369 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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)
 | |
| }
 | 
