/RingPool

Object pool with userspace CAS-mutexes based on RingBuffer

Primary LanguageJava

#RingPool

RingPool это маленькая библиотека, которая реализует удобный и быстрый интерфейс пула объектов.

Пул представлен в виде цикличного буффера, где у каждого элемента есть свой userspace CAS-mutex. При попытке захвата ring.acquire() поток идёт по кольцу и с помощью CAS-операций пытается захватить объект. В случае удачного захвата acquire возвращает номер элемента в массиве. В случае если нет свободных объектов, поток проходит по кольцу 1 раз и возвращает -1.

Чтобы получить объект по указателю достаточно воспользоваться методом ring.get(id) Освобождение объекта ring.release(id)

Для удаления объекта из пула необходимо иметь захваченный mutex, обнулить его ссылку ring.destroy(id) и освободить mutex ring.release(id)