Почему функция уведомления и ожидания 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 функционировать уже

Очевидно, это не сработало бы, если бы код был таким. Но я действительно не вижу, что я не получаю здесь. Поэтому, пожалуйста, просветите меня.

Ответы на вопрос(1)

Ваш ответ на вопрос