条件变量和共享互斥锁

Condition variable and shared mutex

本文关键字:共享 变量 条件      更新时间:2023-10-16

我想知道为什么我不能在 C++14(或 17)中执行此操作

std::shared_timed_mutex mutex;
std::unique_lock<std::shared_timed_mutex> lock(mutex);
std::condition_variable var;
while(!some_condition)
    var.wait(lock);

条件变量似乎只适用于 std::mutex。但是为什么?

这是由标准定义的,以允许实现的最大效率。如果要将不同的锁与condition_variable一起使用,则需要使用 condition_variable_any .请注意,condition_variable_any实现有一些开销。

引用标准:30.5 条件变量

condition_variable 提供了一个条件变量,该变量只能 等待类型为 unique_lock<mutex> 的对象,允许最大值 在某些平台上的效率。