Итак, предположим, у меня есть struct A { int val1; int val2};
И std::queue<A> fifo
Две темы,
Поток читателя: читает все содержимое из A и очищает его.
Поток писателя: записывает по одной A за раз в очередь.
Достаточно ли std :: queue для поддержки беззамочные потокобезопасный контейнер fifo с одним читателем и одним писателем? Если нет, может ли работать какой-либо другой контейнер stl? dequeue является значением по умолчанию в std :: queue.
Нет, вы абсолютно не можете использовать любой контейнер STL напрямую для этого. Вы можете использовать любую из множества реализаций очереди без блокировки, которые уже существуют для C ++. Вы должны искать «SPSC», что означает «Единый производитель, Единый потребитель». Например, из Boost: http://www.boost.org/doc/libs/1_59_0/doc/html/boost/lockfree/spsc_queue.html
Одна реализация с фиксированным размером без ожидания находится здесь: SPSC блокирует свободную очередь без атомики (но обратите внимание на ответ и комментарии там, которые объясняют некоторые способы, которыми реализация в вопросе не совсем безопасна, и предлагают некоторые решения)
Других решений пока нет …