В чем разница между notify_all () и notify_one () std :: condition_variable? - PullRequest
34 голосов
/ 26 января 2012

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

1 Ответ

32 голосов
/ 26 января 2012

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

...