代码如下:
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中的问题吗?
答案 0 :(得分:4)
根据the documentation,这是未定义的行为:
void QMutex::unlock()
解锁互斥锁。试图在不同的线程中解锁互斥锁 锁定它的那个会导致错误。 解锁互斥锁 未锁定会导致未定义的行为。
强调我的。
虽然我并不完全确定您的代码在做什么,但您应该考虑将QMutexLocker用于一个或两个互斥锁,以使代码异常安全。