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