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