Как я понимаю, когда у меня есть коллекция нитей, защищенных std::lock_guard
или std::unique_lock
над std::mutex
, и мьютексы разблокируются путем их явного разблокирования или блокировки, выходящей из области видимости, тогда уведомления о потоках уведомляются.Когда мьютексы разблокируются, это notify_all или notify_one?
Является ли это уведомление a notify_one
или notify_all
?
Я подозреваю, что первое, чтобы не торопиться и ждать, но хотелось бы быть уверенным.
Только один поток может запирать мьютекс за один раз. Когда мьютекс разблокирован, разрешается только один поток блокировать его. Если у вас есть несколько потоков, ожидающих разблокировки в одно и то же время, только один поток получит новый замок, но нет гарантии того, какой поток будет. –
Вопрос не имеет смысла, поскольку 'notify_one' и' notify_all' являются функциями 'std :: condition_variable' not' std :: mutex'. –
Я имел в виду такого же механика. Есть ли внутренний список и точно один получает уведомление. Или это просто пробуждает все и позволяет им бороться за себя. –