我对认真使用互斥锁还很陌生。
在各个地方实现了几个互斥锁后,我意识到程序执行挂起(而不是退出)。我尝试调试它(在 Eclipse 环境中),但我无法找到明确的原因(或者至少我不知道如何找到一个)但是,我现在知道程序在尝试锁定后挂起几次迭代成功地在同一个地方锁定。
这里有一些代码:
void xxx::receiveModule(timeslice now)
{
//check if you have received anything in the incoming buffer
if(!isIncomingDirty())// <- has a mutex inside
{
return;
}
//...
}
bool &yyy::isIncomingDirty() {
boost::unique_lock< boost::shared_mutex > lock(*Communicator_Mutexes[2]));//<-this will cause hang after a few calls
return incomingIsDirty;
}
我不知道死锁发生时会显示什么行为。1-这是一个僵局吗?
2-您会在哪里检查以查找原因?
3-同一互斥锁的递归锁定或嵌套锁定会导致这种情况吗?
这个可能是题外话:
4-I 在类之间交换互斥锁,以供不同线程在其方法中使用。这是一种常见的做法吗?允许这样的事情吗?
非常感谢您的意见和解决方案