【发布时间】:2012-08-01 03:23:14
【问题描述】:
当使用condition_variable_any 和recursive_mutex 时,recursive_mutex 是否可以在condition_variable_any::wait 等待时通常从其他线程获取?我对 Boost 和 C++11 的实现都感兴趣。
这是我主要关心的用例:
void bar();
boost::recursive_mutex mutex;
boost::condition_variable_any condvar;
void foo()
{
boost::lock_guard<boost::recursive_mutex> lock(mutex);
// Ownership level is now one
bar();
}
void bar()
{
boost::unique_lock<boost::recursive_mutex> lock(mutex);
// Ownership level is now two
condvar.wait(lock);
// Does this fully release the recursive mutex,
// so that other threads may acquire it while we're waiting?
// Will the recursive_mutex ownership level
// be restored to two after waiting?
}
【问题讨论】:
-
我在 Boost 文档中找不到任何关于混合
condition_variable_any和recursive_mutex的内容。 -
您是否期望(或希望)调用
wait来解锁互斥锁? -
@curiousguy :是的,我确实做到了。这种行为会降低它遇到死锁问题的可能性。
-
调用函数呢?它期望
bar()解锁互斥锁吗?这里的问题是bar()的合同允许它与其他地方的其他锁 混淆。如果你想要这是你的设计,你需要让它非常明确。 -
@curiousguy,我没有在我的任何东西中使用
recursive_mutex。我刚刚在这里阅读另一个问题时遇到了它,想知道它如何与条件变量互操作。
标签: c++ multithreading c++11 boost recursive-mutex