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