2010-06-05 2 views
3

Мне было интересно, была ли очередь fifo, представленная в документе Фобера и др. http://nedko.arnaudov.name/soft/L17_Fober.pdf, была многопользовательской и создала очередность fifo. Если нет, то какая из лучших документированных очередей FIFO для потребителей и производителей?Fober и другие блокировки FIFO Queue: несколько потребителей и производителей?

Благодаря

ответ

1

да. прочитайте раздел «3.1 Линеаризуемость» . Поп-операция предполагает, что может произойти совпадение. Это означает, что несколько потоков смогут потреблять очередь.

0

я не знаю «очереди Fober», но уже написал безблокировочного FIFOs как кольцевые буферы. То, что относительно легко - это «межблокировочная свободная» очередь, что означает, что читатели не блокируют писателей и наоборот, но несколько читателей должны быть сериализованы, и многопользователи должны быть слишком. Таким образом, это не точно блокировка, но все еще нет блокировки/блокировки между читателями и писателями.

Возможно, есть даже более эффективные подходы, которые позволяют еще меньше блокировать, но, возможно, это уже поможет вам.

1

Я не читал эту статью, но здесь я делаю большое предположение: в документе используется метод CAS (сравнение и своп) для достижения параллелизма.

Lock free не означает блок свободный. Использование CAS будет останавливать другие потоки, но по крайней мере один поток будет перемещаться «вперед» в любое время.

Несколько производителей все записывают в одну очередь - это не проблема. Хитрость - это множество потребителей. Если каждый потребитель должен получить доступ к данным, я бы выполнил это по нескольким очередям, и данные перейдут в следующую очередь после обработки в одном. Если вы имеете в виду несколько потребителей через потоки, то это будет работать по вышеуказанному методу.

Смежные вопросы