Std:: queue thread safe с производителем и несколькими потребителями
как я могу сделать поток в очереди безопасным? Мне нужно нажать /pop/front/back и очистить. есть ли что-то подобное в boost?
У меня есть один производитель и один или несколько пользователей.
Ответ 1
Вы должны защитить доступ к std::queue. Если вы используете boost, используйте boost::mutex. Теперь, если у вас есть несколько считывателей и один поток записи, посмотрите boost::shared_lock (для читателей) и boost::unique_lock (для записи).
Однако, если вы столкнетесь с голосом писателя, посмотрите на boost::shared_mutex.
Ответ 2
std::queue не является потокобезопасным при написании одного или нескольких потоков. И его интерфейс не способствует реализации потоковой безопасности, поскольку он имеет отдельные методы, такие как pop(), size() и empty(), которые должны быть синхронизированы извне.
Общим подходом * является реализация типа очереди с более простым интерфейсом и использование внутренних механизмов блокировки для обеспечения синхронизации.
* Поиск "параллельной очереди С++" должен дать много результатов. Я реализовал очень простую игрушку здесь, где ограничение заключалось в использовании только стандартного С++. См. Также книгу Энтони Уильямса С++ concurrency в действии, а также его блог.