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. 徒手撸了一个API网关,理解更透彻了,代码已上传github,自取~
  2. R语言可视化面积图(area chart)移除轴标签与实际图形之间的空白区域实战:默认的面积图、移除轴标签与实际图形之间的空白区域
  3. Angularjs API指令查询
  4. java打开文件(Windows exe,应用文件exe,以及其他任何格式的文件)
  5. 通用的websocket模板代码
  6. 六安市事业单位计算机基础知识,最全的事业单位考试计算机基础知识试题[1] 2...
  7. C语言博客作业---嵌套循环
  8. Android下pm命令详解
  9. Mybatis(四) 高级映射,一对一,一对多,多对多映射
  10. 64位Win7下安装Oracle11gr2以及PL/sql(32位)安装
  11. mysql取出qq表情_mysql存储emoji表情报错处理,qq互联mysql存储昵称中带表情的数据时报错。...
  12. 如何关闭极域课堂(亲测有效)(含下载链接)
  13. 主流数据库管理系统介绍
  14. 【Leetcode】780. Reaching Points
  15. SDKMAN 安装过程
  16. 一、回首向来萧瑟处,也无风雨也无晴
  17. 图片文档扫描矫正处理(手机扫描仪),OCR识别,图片修改库整合
  18. c语言trim库函数用法,c语言编写trim 函数
  19. php系列之搭建PHP开发环境(XAMPP+PhpStorm)
  20. 编写程序。设银行定期存款年利率rate为2.25%,并已知存款为n年,存款本金为capital,编程计算n年后的本利之和deposit。要求年利率rate、存款年限n和存款本金capital从键盘输入

热门文章

  1. Ubuntu14.04如何备份和恢复系统
  2. malloc在函数内分配内存问题
  3. 判断页面打开的浏览器信息
  4. PHP EOF(heredoc)的使用方法
  5. plsql 常用函数
  6. 夜间排障某省某电信公司后台数据库故障
  7. Java泛型你了解多少
  8. 多线程Thread中常用方法,优先级的使用
  9. 临时设置mysql数据库最大连接数,重启后需重新设置
  10. 软件测试--selenium脚本编写注意点(一)