Qt线程:QMutexLocker

一、描述

在复杂的函数和语句或异常处理代码中锁定和解锁 QMutex 容易出错且难以调试。 在这种情况下可以使用 QMutexLocker 来确保互斥锁的状态始终是明确定义的。
QMutexLocker 应该在需要锁定 QMutex 的函数中创建。 创建 QMutexLocker 时,QMutex 对象被锁定。可以使用 unlock() 和 relock() 解锁和重新锁定互斥锁。 如果锁定,则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;
     }

     mutex.unlock();
     return retVal;
 }

这个示例函数在开发过程中会变得更加复杂,这会增加发生错误的可能性。使用 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;
 }

当 QMutexLocker 对象被销毁时,QMutex将始终被解锁。


二、成员函数

1、QMutex * mutex()

返回 QMutexLocker 正在运行的互斥量对象。

2、void relock()

重新锁定未锁定的 QMutex。

3、void unlock()

 解锁QMutex。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值