QMutexLocker 是一个便利类,它能够自动对QMutex加锁与解锁。由于QMutexLocker 申请的这个lock变量在这个函数退出时,自动的调用析构函数来解锁。这样能够防止在程序编写的过程当中,不一样的地方有多个return的状况,在发生return的时候,没有解锁,致使程序死锁。
下面是一个例子,分别使用了以上两个类。html
第1、使用QMutex
int complexFunction(int flag)
{
mutex.lock();
int retVal = 0;
switch (flag) {
case 0:
case 1:
mutex.unlock();
return moreComplexFunction(flag);
case 2:
{
int status = anotherFunction();
if (status < 0) {
mutex.unlock();
return -2;
}
retVal = status + flag;
}
break;
default:
if (flag > 10) {
mutex.unlock();
return -1;
}
break;
}
mutex.unlock();
return retVal;
}
第2、使用QMutexLocker
int complexFunction(int flag)
{
QMutexLocker locker(&mutex);
int retVal = 0;
switch (flag) {
case 0:
case 1:
return moreComplexFunction(flag);
case 2:
{
int status = anotherFunction();
if (status < 0)
return -2;
retVal = status + flag;
}
break;
default:
if (flag > 10)
return -1;
break;
}
return retVal;
}