Подтвердить что ты не робот

Std:: queue thread safe с производителем и несколькими потребителями

как я могу сделать поток в очереди безопасным? Мне нужно нажать /pop/front/back и очистить. есть ли что-то подобное в boost?

У меня есть один производитель и один или несколько пользователей.

4b9b3361

Ответ 1

Вы должны защитить доступ к std::queue. Если вы используете boost, используйте boost::mutex. Теперь, если у вас есть несколько считывателей и один поток записи, посмотрите boost::shared_lock (для читателей) и boost::unique_lock (для записи).

Однако, если вы столкнетесь с голосом писателя, посмотрите на boost::shared_mutex.

Ответ 2

std::queue не является потокобезопасным при написании одного или нескольких потоков. И его интерфейс не способствует реализации потоковой безопасности, поскольку он имеет отдельные методы, такие как pop(), size() и empty(), которые должны быть синхронизированы извне.

Общим подходом * является реализация типа очереди с более простым интерфейсом и использование внутренних механизмов блокировки для обеспечения синхронизации.

* Поиск "параллельной очереди С++" должен дать много результатов. Я реализовал очень простую игрушку здесь, где ограничение заключалось в использовании только стандартного С++. См. Также книгу Энтони Уильямса С++ concurrency в действии, а также его блог.

Ответ 4

Вы должны защитить его, например. с std::mutex, при каждой операции. Boost будет альтернативой, если у вас еще нет С++ 11.