Qt之QMutexLocker解读
Qt帮助文档关于QMutexLocker的说明
QMutexLocker类用途说明
QMutexLocker是一个非常方便的类,用于简化加锁和解锁的互斥锁
该类中的所有函数均为线程安全
QMutexLocker类的成员函数
构造函数:QMutexLocker(QMutex *mutex)
析构函数:~QMutexLocker() 析构并将已加锁的Mutex解锁
QMutex * mutex() const 返回QMutexLocker里面的mutex
void relock(): 重新给已解锁的互斥锁加锁
void unlock(): 互斥锁解锁
QMutexLocker详细说明
用于解决:在复杂的函数/语句或者异常处理代码处,进行互斥锁的加锁以及解锁,容易出错而且难以调试。
QMutexLocker在构造的同时,对传入的QMutex类进行加锁处理。
可以使用unlock()和relock()来进行解锁和重复加锁的操作。
如果在QMutexLocker析构时,mutex仍处于加锁状态,则将会在析构函数中进行解锁处理。
使用QMutex和QMutexLocker的代码对比
可以看到QMutex锁定之后,需要在接下来的所有的退出代码块中进行解锁处理
int complexFunction(int flag)
{
mutex.lock();
int retVal = 0;
switch (flag) {
case 0:
case 1:
retVal = moreComplexFunction(flag);
break;
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;