最近我正在玩Boost互斥锁,我不确定我是否可以执行以下操作:
boost::recursive_mutex ListLock;
int main(){
ListLock.lock();
function1();
ListLock.unlock();
}
void function1(){
ListLock.lock();
//some operations
ListLock.unlock();
}
可以锁定ListLock两次吗?
答案 0 :(得分:0)
这取决于锁定。递归锁允许...递归锁。所以,你的例子没问题。
非递归锁(例如std :: mutex或boost :: mutex)会死锁(从技术上讲,我认为行为未指定,但大多数POSIX线程实现要么死锁,要么基于EDEADLK引发异常)。
recursive_mutex