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()函數外使用同樣的鎖,這樣出現了死鎖的問題。
