相关疑难解决方法(0)

为什么std :: condition_variable的notify和wait函数都需要一个锁定的互斥锁

在我无休止地了解std::contion_variables的过程中,我遇到了以下问题.在此页面上显示以下内容:

void print_id (int id) {
  std::unique_lock<std::mutex> lck(mtx);
  while (!ready) cv.wait(lck);
  // ...
  std::cout << "thread " << id << '\n';
}
Run Code Online (Sandbox Code Playgroud)

之后它说:

void go() {
  std::unique_lock<std::mutex> lck(mtx);
  ready = true;
  cv.notify_all();
}
Run Code Online (Sandbox Code Playgroud)

据我了解,这两个功能都将停止std::unqique_lock.直到获得一个独特的锁.也就是说,没有其他线程有锁.

所以说print_id首先执行该功能.将获取唯一锁定,并且该功能将在等待线上停止.

如果go然后执行该函数(在单独的线程上),则该代码将在唯一的锁定行上停止.由于互斥锁已被该print_id功能锁定.

显然,如果代码是这样的话,这将无效.但我真的没有看到我没有到达这里.所以请赐教.

c++ multithreading mutex locking c++11

5
推荐指数
1
解决办法
957
查看次数

标签 统计

c++ ×1

c++11 ×1

locking ×1

multithreading ×1

mutex ×1