QT下多线程一个函数:
TIME_MANAGE_STATE Federate::getTimeState() { QMutexLocker locker(&_mutex); return _timeState; }
运行时发现其锁死了。
检查后发现原因:多重同步锁问题。即在此函数外又加了一层锁,导致两次锁定冲突。
_mutex.lock(); while(getTimeState() != TIME_ADVANCE_GRANT) { if(procedureTermed()) { _mq.endSim();//解除输入消息队列的等待 return -1; } cout << "***!!! modelLink: timeAdvance wait here when TIME_ADVACNE_REQUEST state......" << endl; _waitor.wait(&_mutex); } _mutex.unlock();
可以看到,在getTimeState()函数外使用同样的锁,这样出现了死锁的问题。