О чем Вам говорит понятие «кольцевой буфер»?
Банальный массив длины Len
Индекс следующего элемента: Index = (Index + 1) % Len
Индекс предыдущего элемента: Index = (Index + Len - 1) % Len
Добавляем в голову, читаем с хвоста - соответственно, буфер содержит два индекса: Head и Tail.
Если голова догнала хвост - буфер переполнен.
Если хвост догнал голову - буфер пуст.
Производитель-потребитель