zoukankan      html  css  js  c++  java
  • 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()函数外使用同样的锁,这样出现了死锁的问题。

  • 相关阅读:
    ThreadLocal
    mysql
    heroku 的用法
    Redis
    disruptor
    RxJava
    TCP
    虚拟机的安装及配置等
    k8s
    Ribbon源
  • 原文地址:https://www.cnblogs.com/myboat/p/14073116.html
Copyright © 2011-2022 走看看