std::queue
не является потокобезопасным при написании одного или нескольких потоков. И его интерфейс не способствует реалистичной реализации потока, поскольку он имеет отдельные методы, такие как pop()
, size()
и empty()
, которые необходимо синхронизировать извне.
Общепринятый подход * - реализовать тип очереди с более простым интерфейсом и использовать внутренние механизмы блокировки для обеспечения синхронизации.
* Поиск «параллельной очереди C++» должен давать много результатов. Я реализовал очень простую игрушку here, где ограничение заключалось в использовании только стандартного C++. См. Также книгу Энтони Уильямса Совместимость C++ в действии, а также его блог.
Изучите [мьютексы] (http://vichargrave.com/multithreaded-work-queue-in-c/). – Martol1ni
Ваше имя спрашивает, являются ли они потокобезопасными, но ваше вступительное предложение спрашивает, как вы можете их сделать. Значит, вы уже знаете ответ на вопрос в названии. – WhozCraig
Возможный дубликат: C++ 11 поточно-безопасная очередь (http://stackoverflow.com/questions/15278343/c11-thread-safe-queue) – yasouser