fix: 修复 timer.GetTicker 在获取到定时器后立刻使用造成的竞态问题
This commit is contained in:
parent
d2f982bf42
commit
a4bc8280a4
|
@ -9,11 +9,7 @@ import (
|
||||||
var timer = new(Timer)
|
var timer = new(Timer)
|
||||||
|
|
||||||
func GetTicker(size int, options ...Option) *Ticker {
|
func GetTicker(size int, options ...Option) *Ticker {
|
||||||
ticker := timer.NewTicker(size)
|
return timer.NewTicker(size, options...)
|
||||||
for _, option := range options {
|
|
||||||
option(ticker)
|
|
||||||
}
|
|
||||||
return ticker
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type Timer struct {
|
type Timer struct {
|
||||||
|
@ -21,7 +17,7 @@ type Timer struct {
|
||||||
lock sync.Mutex
|
lock sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func (slf *Timer) NewTicker(size int) *Ticker {
|
func (slf *Timer) NewTicker(size int, options ...Option) *Ticker {
|
||||||
slf.lock.Lock()
|
slf.lock.Lock()
|
||||||
defer slf.lock.Unlock()
|
defer slf.lock.Unlock()
|
||||||
|
|
||||||
|
@ -37,6 +33,9 @@ func (slf *Timer) NewTicker(size int) *Ticker {
|
||||||
wheel: timingwheel.NewTimingWheel(timingWheelTick, int64(size)),
|
wheel: timingwheel.NewTimingWheel(timingWheelTick, int64(size)),
|
||||||
timers: make(map[string]*Scheduler),
|
timers: make(map[string]*Scheduler),
|
||||||
}
|
}
|
||||||
|
for _, option := range options {
|
||||||
|
option(ticker)
|
||||||
|
}
|
||||||
ticker.wheel.Start()
|
ticker.wheel.Start()
|
||||||
return ticker
|
return ticker
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue