Почему функция уведомления и ожидания std :: condition_variable требует заблокированного мьютекса
На моем бесконечном стремлении понятьstd::contion_variable
Я столкнулся со следующим. Наэта страница это говорит следующее:
void print_id (int id) {
std::unique_lock<std::mutex> lck(mtx);
while (!ready) cv.wait(lck);
// ...
std::cout << "thread " << id << '\n';
}
И после этого он говорит это:
void go() {
std::unique_lock<std::mutex> lck(mtx);
ready = true;
cv.notify_all();
}
Теперь, насколько я понимаю, обе эти функции остановятся наstd::unqique_lock
линия. Пока не получен уникальный замок. То есть ни один другой поток не имеет блокировки.
Так сказатьprint_id
Функция выполняется в первую очередь. Будет зафиксирован уникальный замок, и функция остановится на линии ожидания.
Еслиgo
Затем выполняется функция (в отдельном потоке), код там останавливается на уникальной строке блокировки. Поскольку мьютекс заблокированprint_id
функционировать уже
Очевидно, это не сработало бы, если бы код был таким. Но я действительно не вижу, что я не получаю здесь. Поэтому, пожалуйста, просветите меня.