【发布时间】:2016-01-21 17:51:34
【问题描述】:
我想知道为什么我不能在 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。但为什么?
【问题讨论】:
-
你能分享一下你的用例吗?
-
这很酷的是,您不仅可以等待如上所示“写锁定”的
shared_timed_mutex,还可以使用shared_lock在“读锁定”时等待.也许您需要等到编写器线程更新信息才能发布它。 -
用例有点复杂:我有一个带有全局(目前)读/写锁的数据存储。并且还锁定每个对象。如果我获取一个对象,我首先锁定全局锁,检索对象,锁定对象,然后释放全局锁。现在可能会出现对象被删除的情况。所以我不想等待对象锁(因为那个锁也会被破坏)而是有一个条件变量,当事情发生变化时唤醒唤醒线程。也许不是最好的设计,但它没有死锁并且不使用太多内存。
标签: c++ multithreading c++14