做条件变量解锁他们的互斥锁?

时间:2015-07-23 04:15:06

标签: c++ multithreading stl thread-safety

我正在使用条件变量,我假设他们在等待时解锁相关的互斥锁。否则,永远不会释放互斥锁。但是,我无法在任何文档中找到此信息。请考虑以下代码:

std::condition_variable consumerWakeMeUp;
std::mutex queueMutex;
// this locks the mutex
std::unique_lock<std::mutex> lk(queueMutex);
// going to sleep now
consumerWakeMeUp.wait(lk);

&#34; consumerWakeMeUp.wait(lk)&#34;解锁互斥锁?我必须假设线程会永远传递该静音。但如果有人知道更多细节,我会很感激输入。

谢谢。

1 个答案:

答案 0 :(得分:1)

没关系

&#34;以原子方式释放锁定,阻止当前正在执行的线程,并将其添加到等待* this的线程列表中。执行notify_all()或notify_one()时,线程将被解除阻塞。它也可能是虚假的解锁。 取消阻止时,无论原因如何,都会重新获取锁定并等待退出。如果此函数通过异常退出,则还会重新获取锁定。 (直到C ++ 14)&#34;