在Qt 5.4中两次解锁互斥锁是否可以?

时间:2015-03-19 03:18:45

标签: c++ qt

代码如下:

waitmutex.lock(); //waitmutex is a QMutex
int tout=4000;
if(!waitc.wait(&waitmutex,tout))//waitc is a QWaitCondition
{
    waitmutex.unlock(); // unlock first time
    mutex.lock();
    if(tileCacheQueue.count()==0)
    {
        mutex.unlock();
        break;
    }
    mutex.unlock();
}
waitmutex.unlock();// unlock the second time possibly?

代码是否可能导致waitmutex被解锁两次? 这是Qt中的问题吗?

1 个答案:

答案 0 :(得分:4)

根据the documentation,这是未定义的行为:

  

void QMutex::unlock()

     

解锁互斥锁。试图在不同的线程中解锁互斥锁   锁定它的那个会导致错误。 解锁互斥锁   未锁定会导致未定义的行为。

强调我的。

虽然我并不完全确定您的代码在做什么,但您应该考虑将QMutexLocker用于一个或两个互斥锁,以使代码异常安全。