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()函数外使用同样的锁,这样出现了死锁的问题。

posted @   小船1968  阅读(862)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示