blob: ad99657e9f4df79dd4f555c53b487d08c05abafb [file] [log] [blame]
package disruptor
import "time"
type Worker struct {
cursor Sequence
sequence Sequence
callback func(uint64)
sleep time.Duration
}
func (this *Worker) Process() {
current, max := uint64(0), uint64(0)
for {
for current >= max {
max = this.cursor.atomicLoad()
time.Sleep(this.sleep)
}
if max == Uint64MaxValue {
break
}
this.callback(current)
this.sequence.store(current)
current++
}
}
func NewWorker(cursor Sequence, callback func(uint64), sleep time.Duration) Worker {
return Worker{
cursor: cursor,
sequence: NewSequence(),
callback: callback,
sleep: sleep,
}
}
const Uint64MaxValue uint64 = 0xFFFFFFFFFFFFFFFF