QMutex类提供了一种保护一个变量和一段代码的方法。

mutex.lock() //锁住互斥量(mutex)。如果互斥量是解锁的,那么当前线程就立即占用并锁定它。否则,当前线程就会被阻塞,知道掌握这个互斥量的线程对它解锁为止。

mutex.unlock()//解锁

mutex.tryLock()//尝试解锁,如果该互斥量已经锁住,它就会立即返回

For example, this complex function locks a QMutex upon entering the function and unlocks the mutex at all the exit points:

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;}

This example function will get more complicated as it is developed, which increases the likelihood that errors will occur.

在一些复杂函数或时在抛出C++异常函数中锁定和解锁互定量,非常容易发生错误。Qt提供了方便的QMutexLocker类来简化对互斥量的处理。QMu特训Lock二的构造函数接受QMutex作为参数并且将其锁住。QMutexLock的析构函数则对这个互斥量进行解锁。

Using QMutexLocker greatly simplifies the code, and makes it more readable:

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;}

Now, the mutex will always be unlocked when the QMutexLocker object is destroyed (when the function returns since locker is an auto variable).

Qt 互斥量 QMutex相关推荐

  1. Qt 互斥锁 QMutex 的简单应用

    Qt 互斥锁 QMutex 的简单应用 在多线程解决问题中,经常会碰到多个线程操作同一片资源,有些时候用信号量的方式去处理,但有的时候需要用到互斥锁. 互斥锁:说白了就是,资源某个时间只能被一个线程使 ...

  2. 互斥锁 QMutex Class 的翻译

    互斥锁 QMutex Class 的翻译 简介 互斥锁的存在是为了保证线程间的访问资源的连续性.该资源可以是一个对象(object),数据结构(data structure),或者一段代码( a se ...

  3. 互斥量、读写锁长占时分析的利器——valgrind的DRD

    在进行多线程编程时,我们可能会存在同时操作(读.写)同一份内存的可能性.为了保证数据的正确性,我们往往会使用互斥量.读写锁等同步方法.(转载请指明出于breaksoftware的csdn博客) 互斥量 ...

  4. Linux内核中锁机制之完成量、互斥量

    在上一篇博文中笔者分析了关于信号量.读写信号量的使用及源码实现,接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题. 八.完成量 下面讨论完成量的内容,首先需明确完成量表示为一个执行单元需要等 ...

  5. 信号量 互斥量 条件变量

    原文:https://blog.csdn.net/qq_32646795/article/details/78221005 本文打算写一些和锁有关的东西,谈一谈我对锁的原理和实现的理解,主要包含以下方 ...

  6. Linux 多线程同步机制:互斥量、信号量、条件变量

    互斥量:互斥量提供对共享资源的保护访问,它的两种状态:lock和unlock,用来保证某段时间内只有一个线程使用共享资源,互斥量的数据类型是pthread_mutex_t 主要涉及函数:pthread ...

  7. [一个经典的多线程同步问题]解决方案三:互斥量Mutex

    本篇通过互斥量来解决线程的同步,学习其中的一些知识. 互斥量也是一个内核对象,它用来确保一个线程独占一个资源的访问.互斥量与关键段的行为非常相似,并且互斥量可以用于不同进程中的线程互斥访问资源.使用互 ...

  8. freertos 创建互斥量_STM32CubeMX+FreeRTOS学习[6] 互斥量(Lu)

    FreeRTOS 学习之六:互斥量 前提:默认已经装好 MDK V5 和 STM32CubeMX ,并安装了 STM32F1xx 系列的支持包. 硬件平台: STM32F1xx 系列. 目的:学习互斥 ...

  9. Linux下互斥量与条件变量详细解析

    1. 首先pthread_cond_wait 的定义是这样的 The pthread_cond_wait() and pthread_cond_timedwait() functions are us ...

最新文章

  1. 2018 年全球互联网十大数据泄露事件盘点
  2. 【错误记录】编译安卓项目报错 ( AndroidMavenPlugin 错误 )
  3. c++STL算法基础
  4. ML.NET生成器带来了许多错误修复和增强功能以及新功能
  5. 右军:为张逸《解构领域驱动设计》推荐序
  6. powderdesinger显示中英文表名
  7. 为什么BERT在商业环境碰壁?
  8. linux dd克隆系统后,Ubuntu14.04 dd命令克隆系统镜像安装到另一台机器上
  9. 微信小程序实现仿美团外卖饿了么左右联动页面
  10. 云服务器哪家强?AWS、Azure、阿里云、腾讯云、华为云深度评测
  11. 1bit等于多少字节,换算方法?
  12. 计算机桌面出现蓝色底色,电脑桌面图标有蓝色阴影怎么去掉
  13. appstore截屏的制作方法
  14. 电流测试c语言算法,电流检测电路设计方案汇总(六款模拟电路设计原理图详解)...
  15. RabbitMQ下载安装
  16. SQL Server Group by
  17. HNOI2018退役记
  18. Winform下ToolStrip承载自定义控件或 Windows 窗体控件。
  19. 威洛特:狗狗乱咬东西都是有原因的
  20. 测试手机新机软件,玩机小技巧 篇一:手把手教你快速验新机——写给剁手节买了新手机的值友...

热门文章

  1. Spring boot 连接 sqlserver
  2. 慢慢人生路,学点Jakarta基础-深入剖析Java的接口和抽象类
  3. 函数式编程(4)-装饰器
  4. CentOS7.2安装jdk7u80
  5. Java 按字节获得字符串(中文)长度
  6. Hadoop HA on Yarn——集群配置
  7. fragment中嵌套viewpager,vierpager中有多个fragment,不显示 .
  8. [转载]JS语法字典
  9. 利用UIScrollView和UIPageControl实现图片切换
  10. 设计模式的七大设计原则:其七:合成复用原则