Qt 互斥量 QMutex
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相关推荐
- Qt 互斥锁 QMutex 的简单应用
Qt 互斥锁 QMutex 的简单应用 在多线程解决问题中,经常会碰到多个线程操作同一片资源,有些时候用信号量的方式去处理,但有的时候需要用到互斥锁. 互斥锁:说白了就是,资源某个时间只能被一个线程使 ...
- 互斥锁 QMutex Class 的翻译
互斥锁 QMutex Class 的翻译 简介 互斥锁的存在是为了保证线程间的访问资源的连续性.该资源可以是一个对象(object),数据结构(data structure),或者一段代码( a se ...
- 互斥量、读写锁长占时分析的利器——valgrind的DRD
在进行多线程编程时,我们可能会存在同时操作(读.写)同一份内存的可能性.为了保证数据的正确性,我们往往会使用互斥量.读写锁等同步方法.(转载请指明出于breaksoftware的csdn博客) 互斥量 ...
- Linux内核中锁机制之完成量、互斥量
在上一篇博文中笔者分析了关于信号量.读写信号量的使用及源码实现,接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题. 八.完成量 下面讨论完成量的内容,首先需明确完成量表示为一个执行单元需要等 ...
- 信号量 互斥量 条件变量
原文:https://blog.csdn.net/qq_32646795/article/details/78221005 本文打算写一些和锁有关的东西,谈一谈我对锁的原理和实现的理解,主要包含以下方 ...
- Linux 多线程同步机制:互斥量、信号量、条件变量
互斥量:互斥量提供对共享资源的保护访问,它的两种状态:lock和unlock,用来保证某段时间内只有一个线程使用共享资源,互斥量的数据类型是pthread_mutex_t 主要涉及函数:pthread ...
- [一个经典的多线程同步问题]解决方案三:互斥量Mutex
本篇通过互斥量来解决线程的同步,学习其中的一些知识. 互斥量也是一个内核对象,它用来确保一个线程独占一个资源的访问.互斥量与关键段的行为非常相似,并且互斥量可以用于不同进程中的线程互斥访问资源.使用互 ...
- freertos 创建互斥量_STM32CubeMX+FreeRTOS学习[6] 互斥量(Lu)
FreeRTOS 学习之六:互斥量 前提:默认已经装好 MDK V5 和 STM32CubeMX ,并安装了 STM32F1xx 系列的支持包. 硬件平台: STM32F1xx 系列. 目的:学习互斥 ...
- Linux下互斥量与条件变量详细解析
1. 首先pthread_cond_wait 的定义是这样的 The pthread_cond_wait() and pthread_cond_timedwait() functions are us ...
最新文章
- 徒手撸了一个API网关,理解更透彻了,代码已上传github,自取~
- R语言可视化面积图(area chart)移除轴标签与实际图形之间的空白区域实战:默认的面积图、移除轴标签与实际图形之间的空白区域
- Angularjs API指令查询
- java打开文件(Windows exe,应用文件exe,以及其他任何格式的文件)
- 通用的websocket模板代码
- 六安市事业单位计算机基础知识,最全的事业单位考试计算机基础知识试题[1] 2...
- C语言博客作业---嵌套循环
- Android下pm命令详解
- Mybatis(四) 高级映射,一对一,一对多,多对多映射
- 64位Win7下安装Oracle11gr2以及PL/sql(32位)安装
- mysql取出qq表情_mysql存储emoji表情报错处理,qq互联mysql存储昵称中带表情的数据时报错。...
- 如何关闭极域课堂(亲测有效)(含下载链接)
- 主流数据库管理系统介绍
- 【Leetcode】780. Reaching Points
- SDKMAN 安装过程
- 一、回首向来萧瑟处,也无风雨也无晴
- 图片文档扫描矫正处理(手机扫描仪),OCR识别,图片修改库整合
- c语言trim库函数用法,c语言编写trim 函数
- php系列之搭建PHP开发环境(XAMPP+PhpStorm)
- 编写程序。设银行定期存款年利率rate为2.25%,并已知存款为n年,存款本金为capital,编程计算n年后的本利之和deposit。要求年利率rate、存款年限n和存款本金capital从键盘输入