条件变量和共享互斥锁

Kai*_*ast 8 c++ multithreading c++14

我想知道为什么我不能在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);
Run Code Online (Sandbox Code Playgroud)

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

inf*_*inf 12

这由标准定义,以实现最高的实施效率.如果您想使用不同的锁,则condition_variable需要使用condition_variable_any.请注意,condition_variable_any实现有一些开销.

引用标准:30.5条件变量

Class condition_variable提供了一个条件变量,它只能在类型的对象上等待unique_lock<mutex>,从而在某些平台上实现最大效率.