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

Какая разница между notify_all() и notify_one() для std:: condition_variable?

В настоящее время я реализую многопоточный проект, используя std::thread в С++ 11. Я использую std::condition_variable для синхронизации потоков. В деталях одна потребительская функция вызывает wait() функцию-член std::condition_variable для ожидания задачи из глобальной очереди задач, другая функция производителя генерирует и помещает задачи в очередь. Но я не знаю разницы между notify_all() и notify_one() функциями-членами std::condition_variable. Какую функцию я должен использовать в функции производителя? Спасибо!

4b9b3361

Ответ 1

Если в переменной условия заблокировано десять потоков, например, notify_one() будет разблокировать только один поток, а notify_all() разблокирует их все. В вашем случае вы захотите использовать notify_one(), чтобы не разбудить потоки, у которых нет работы, ожидающей их.