QT下线程锁死的问题

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

原文地址:https://www.cnblogs.com/myboat/p/14073116.html