代码非常简单:
type RoundRobin struct{
index int64
}
func (m *RoundRobin) GetIndex(max int) int64 {
for {
index := atomic.LoadInt64(&m.index)
newIndex := index + 1
if int(newIndex) >= max {
newIndex = 0
}
if atomic.CompareAndSwapInt64(&m.index, index, newIndex) {
return newIndex
} else {
continue
}
}
}