Контейнер STL для одного производителя FIFO?

Итак, предположим, у меня есть struct A { int val1; int val2};
И std::queue<A> fifo

Две темы,
Поток читателя: читает все содержимое из A и очищает его.
Поток писателя: записывает по одной A за раз в очередь.

Достаточно ли std :: queue для поддержки беззамочные потокобезопасный контейнер fifo с одним читателем и одним писателем? Если нет, может ли работать какой-либо другой контейнер stl? dequeue является значением по умолчанию в std :: queue.

2

Решение

Нет, вы абсолютно не можете использовать любой контейнер STL напрямую для этого. Вы можете использовать любую из множества реализаций очереди без блокировки, которые уже существуют для C ++. Вы должны искать «SPSC», что означает «Единый производитель, Единый потребитель». Например, из Boost: http://www.boost.org/doc/libs/1_59_0/doc/html/boost/lockfree/spsc_queue.html

Одна реализация с фиксированным размером без ожидания находится здесь: SPSC блокирует свободную очередь без атомики (но обратите внимание на ответ и комментарии там, которые объясняют некоторые способы, которыми реализация в вопросе не совсем безопасна, и предлагают некоторые решения)

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]