c++ - 条件变量会解锁它们的互斥量吗?

标签 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);

“consumerWakeMeUp.wait(lk)”是否解锁了互斥体?我必须假设否则线程将永远传递该互斥体。但如果有人知道更多细节,我将不胜感激。

谢谢。

最佳答案

没关系

"原子地释放锁,阻塞当前正在执行的线程,并将其添加到等待*this 的线程列表中。当执行notify_all() 或notify_one() 时,线程将被解除阻塞。它也可能被虚假地解除阻塞。 当解除阻塞时,无论什么原因,都会重新获取锁并等待退出。如果此函数通过异常退出,也会重新获取锁。(直到 C++14)

关于c++ - 条件变量会解锁它们的互斥量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31578049/

相关文章:

android - 你如何知道 Linux 中是否已经存在互斥对象?

c++ - 如何只用STL算法实现这个功能

c++ - 在类中使用静态成员对象有什么问题?

c - 辅助进程完成时终止 Main

c++ - 是否必须包含 header <iterator> 才能使用 begin 和 end 函数?

java线程,我的代码有什么问题

c++ - std::map.find 上的 Sigbus

c++ - 连接两个 std::vectors

c++ - CMake find_package 与 GLEW

c++ - Arduino 无法让我的 bool 值工作