Вопрос к тем кто занимался spsc queue различных реализаций.
Пока деталей раскрывать не хочу, но мне кажется я сделал новый алгоритм.
Написал я на cи++ (6 комбинаций) и на си (6 комбинаций, сейчас буду доделывать).
Типа очередей два ограниченные/не ограниченные.
Мне нужен код теста для spsc очереди (проверки того, что из очереди ничего не теряется), для проверки своего "велосипеда".
Если пройдет тесты, то я на основе этого алгоритма сделаю ещё mpsc|spmc|mpmc.
Любителям писать код в студию, прошу воздержаться, мне надо проверить что я прав сначала, а потом уже решу позориться или нет.
Результаты бенчмарков использовался clock()
Сокращения я думаю должны понять все
st — один поток
lf_spsc — 2 потока
ca — circular array (ограниченная очередь на N элементов)
ll — linked list (неограниченная очередь, 1 элемент в узле)
ull — linked list + circular array (неограниченная очередь, по N элементов в узле)
*_p_t в узлах храним указатель(и) на значение(я)
st_queue_ca_p_t 699
st_queue_ll_p_t 1374
st_queue_ull_p_t 743
lf_spsc_queue_ca_p_t 1766
lf_spsc_queue_ll_p_t 2008
lf_spsc_queue_ull_p_t 1632
*_v_t в узлах значение(я)
st_queue_ca_v_t 606
st_queue_ll_v_t 728
st_queue_ull_v_t 221
lf_spsc_queue_ca_v_t 221
lf_spsc_queue_ll_v_t 1515
lf_spsc_queue_ull_v_t 146