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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM