我正在处理条件变量,我假设它们在等待时解锁相关联的互斥体。否则,互斥锁永远不会被释放。但是,我无法在任何文档中找到此信息。考虑以下代码:
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);
“consumerWakeMeUp.wait(lk)”是否解锁了互斥体?我必须假设否则线程将永远传递该互斥体。但如果有人知道更多细节,我将不胜感激。
谢谢。
最佳答案
没关系
"原子地释放锁,阻塞当前正在执行的线程,并将其添加到等待*this 的线程列表中。当执行notify_all() 或notify_one() 时,线程将被解除阻塞。它也可能被虚假地解除阻塞。 当解除阻塞时,无论什么原因,都会重新获取锁并等待退出。如果此函数通过异常退出,也会重新获取锁。(直到 C++14)”
关于c++ - 条件变量会解锁它们的互斥量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31578049/