【发布时间】:2017-07-04 18:15:00
【问题描述】:
最近我在玩 Boost mutex,我不确定我是否可以做到以下几点:
boost::recursive_mutex ListLock;
int main(){
ListLock.lock();
function1();
ListLock.unlock();
}
void function1(){
ListLock.lock();
//some operations
ListLock.unlock();
}
可以两次锁定 ListLock 吗?
【问题讨论】:
-
请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。当您尝试编译它时会发生什么;还是稍后运行?你有什么问题?
-
当然可以,虽然它不会编译。但是,没有任何问题与您递归锁定有关,这就是我感觉您要问的问题。
-
这就是
recursive_mutex的全部想法。您可以递归锁定它(尽管请考虑使用unique_lock或lock_guard以避免手动锁定互斥锁)。 -
您将收到运行时错误。如果您的程序需要互斥锁重入,您必须使用
boost::recursive_mutex。确保你使用 `boost::lock_guard' 它将为你省去很多悲伤。承诺。