QMutexLocker用法

QMutexLocker是QT库中用于简化互斥锁锁定和解锁的类,通过在构造时锁定QMutex并在析构时自动解锁,避免了手动管理锁可能导致的错误和复杂性。在涉及多路径和异常处理的函数中,使用QMutexLocker可以确保资源管理的正确性和代码简洁性。
摘要由CSDN通过智能技术生成

QMutexLocker

详细描述:QMutexLocker类是一个方便的类,它简化了锁定和解锁互斥锁。在复杂函数和语句或异常处理代码中对QMutex进行锁定和解锁是容易出错的,很难调试。在这种情况下可以使用QMutexLocker来确保互斥锁的状态总是定义良好的。应该在需要锁定QMutex的fuconcept中创建QMutexLocker。您可以使用unlock()和relock()对互斥对象进行解锁和重新锁定。如果锁住了,那么当QMutexLocker被销毁时,互斥锁将被解锁。

意思就是用QMutexLocker创建的时候进行上锁,然后等他的对象被销毁时自动就解锁了,简化了互斥锁的操作流程。QMutexLocker创建时传入一个并未锁定(若是锁定可用relock重新锁定或unlock解锁)的QMutex指针变量

如果不用QMutexLocker进行操作时

 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;
      }
      mutex.unlock();//解锁
      return retVal;
  }

如果进行多个解锁操作的话那么势必会复杂化了代码,逻辑不到位的话还会出现你意想不到的bug。所以QT中可以用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;
  }

当对象locker被销毁时,他自动解锁,简化了代码。栈中对象在代码块结束时自动释放内存。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值