Неблокирующая параллельная очередь с предложением и сбросом
Мне нужна неограниченная неблокирующая параллельная очередь, в основном, всего 2 операции:
- предложение: атомарно вставляет указанный элемент в хвост этой очереди;
- flush: берет все элементы, присутствующие в этот момент в очереди, и начинает обрабатывать их один за другим в соответствии с порядком вставки. Более конкретно то, что должно быть атомарным, - это только эта операция "takeAll", которая станет самой первой операцией флеша. Все предметы, предлагаемые в очередь после takeAll, будут вставлены, а затем обработаны только другим последующим сбросом.
Цель состоит в том, что у потребителя есть одна операция CAS на takeAll и затем может перебирать элементы в списке без прохождения операции CAS для каждого чтения. Далее мы уже владеем Node (Entry), поскольку это необходимо для хранения некоторого другого неизменяемого состояния. Новый Node может принимать HEAD как аргумент конструктора, создавая связанный список с одним направлением.
Существует ли в литературе очередь с этими характеристиками?