mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-11-18 10:26:01 -05: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)
|
|
}
|