> 文档中心 > QMutexLocker(比QMutex更简单的让线程安全的方式)

QMutexLocker(比QMutex更简单的让线程安全的方式)

今天在看别人的代码时,看到了QMutexLocker这个类,一看居然没有解锁的代码,于是就产生了好奇,特此记录一下。

注意:这个类中的所有函数都是线程安全的。

#include 

创建:创建的时候就是为下面代码加锁的时候

QMutexLocker ( QMutex * mutex );

为什么要引入QMutexLocker,大家都知道QMutex是为了线程安全而产生的,同理QMutexLocker也是,只是它相对于QMutex要简化了许多,也比较不容易出错。

咋们来看下下面的代码:

QMutex mutex; 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  10) {      mutex.unlock();      return -1;  }  break;     }     mutex.unlock();     return retVal; }

在每个函数出口的时候都要解锁一遍,这不仅增加了代码的复杂性也增加了发生错误的可能性。

咋们再来看看使用QMutexLocker的时候,有多简单:

QMutex mutex;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  10)      return -1;  break;     }     return retVal; }

当QMutexLocker对象被销毁时,互斥锁将始终处于解锁状态。也就是说当这个函数执行完,QMutexLocker就会因为自身的机制解锁。