QT下线程锁死的问题
QT下多线程一个函数:
TIME_MANAGE_STATE Federate::getTimeState() { QMutexLocker locker(&_mutex); return _timeState; }
运行时发现其锁死了。
检查后发现原因:多重同步锁问题。即在此函数外又加了一层锁,导致两次锁定冲突。
1 2 3 4 5 6 7 8 9 10 11 12 13 | _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()函数外使用同样的锁,这样出现了死锁的问题。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步