tgoop.com/no_brain_cpp/541
Last Update:
В общем, схематоз:
Было: MPMC FAA-очередь занятых элементов + такая же очередь свободных элементов
Стало: MPMC FAA-очередь занятых элементов + битсет, отвечающий за свободные элементы
Битсет имеет операции push(index)
и take_any() -> optional<size_t>
Выглядит как массив атомиков, в которых один битик соответствует одному индексу. Я хотел минимизировать контеншн, потому
1. массив побит на блоки по 16 атомиков (128 байт, 1024 элемента-битика)
2. каждый поток имеет свой "родной" блок
На take_any()
мы ищем битик в родном блоке. Если не нашли — начинаем проходить по чужим блокам. Прошли круг и ничего не нашли — очень жаль, вываливаемся
Есть у меня большие сомнения в линеаризуемости этого добра) Хотя пока читатель один, должно сходиться
Дальше буду смотреть, есть ли прок от замены MPMC очереди на MPSC, раз мне больше всё равно не надо
BY Кресты на моей кукухе

Share with your friend now:
tgoop.com/no_brain_cpp/541