lau*_*svr 5 c++ multithreading mutex locking c++11
在我无休止地了解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功能锁定.
显然,如果代码是这样的话,这将无效.但我真的没有看到我没有到达这里.所以请赐教.