Собственно, пишу соотв. класс (пока для Perl). Мне он нужен для того, чтобы задания, поставленные в очередь отправки, в случае успешной отправки выдёргивать из списка-кольца. То, что одно задание отправится - не гарантирует успеха с остальными, поэтому нельзя очищать просто N элементов подряд из очереди: есть вероятность того, что какое-то задание удастся грохнуть из списка, а какие-то придётся оставить до следующей попытки.
Вопрос к тому, что всегда интересно посмотреть на чужую имплементацию, чтобы у себя не делать наивную реализацию, а сразу сделать правильно.
У меня реализация с 2-мя структурами данных: стек свободных элементов и кольцевой двухсвязный список, к которому есть отдельная переменная-указатель на ноду-голову списка (управляет добавлением новых элементов). «К голове» либо создаётся и привязывается новый узел (будущая голова), если ссылка на следующий элемент ведёт в NULL, либо происходит перезапись ссылки на данные в том элементе, на который голова указывает как на следующий и происходит смещение указателя головы на этот следующий элемент (за счёт этого старые данные по достижении границ буфера перетираются новыми).
Стек нужен для того, чтобы брать из него индексы свободных ячеек списка нод двухсвязного кольца и пушить туда эти индексы при высвобождении соотв. нод.
Условно - если размер кольца 5 элементов, то на стеке изначально будут лежать : [4,3,2,1,0] - и первый pop возьмёт индекс 0, создаст в nodes_list[0] узел с NULL-ссылками на next и prev ноды.
Может, на Ruby что-то такое есть, например? Ну или ещё на каком языке с не-Rust и не-C++ подобным синтаксисом?