blob: 2c4057e6af6047ad560f2a4eeef6064c27124178 [file] [log] [blame]
package main
import (
"fmt"
"time"
"github.com/smartystreets/go-disruptor"
)
// func consume0(reader *disruptor.SimpleReader) {
// for {
// reader.Receive()
// }
// }
func consume1(reader *disruptor.Reader) {
started := time.Now()
for {
if lower, upper := reader.Receive(); upper >= 0 {
for sequence := lower; sequence <= upper; sequence++ {
if sequence%ReportingFrequency == 0 {
finished := time.Now()
fmt.Println(sequence, finished.Sub(started))
started = time.Now()
}
message := ringBuffer[sequence&RingMask]
if sequence != message {
alert := fmt.Sprintf("***Race Condition***\tSequence: %d, Message %d\n", sequence, message)
fmt.Println(alert)
panic(alert)
}
ringBuffer[sequence&RingMask] = sequence % 2
}
reader.Commit(upper)
}
}
}
func consume2(reader *disruptor.Reader) {
for {
if lower, upper := reader.Receive(); upper >= 0 {
for sequence := lower; sequence <= upper; sequence++ {
message := ringBuffer[sequence&RingMask]
if message != sequence%2 {
alert := fmt.Sprintf("Race Condition (Layer 2)::Sequence: %d, Message %d\n", sequence, message)
fmt.Print(alert)
panic(alert)
}
}
reader.Commit(upper)
}
}
}