在Qt的多线程控制中,互斥量的访问最简单的控制是添加一个mutex锁,对一个函数或者变量锁定。

一直不理解QMutex中的锁是如何运行的,或者说如何利用这个锁将变量进行锁定。官方实例是这样的:

 1 QMutex mutex;2 int number = 6;3 4 void method1()5 {6     mutex.lock();7     number *= 5;8     number /= 4;9     mutex.unlock();
10 }
11
12 void method2()
13 {
14     mutex.lock();
15     number *= 3;
16     number /= 2;
17     mutex.unlock();
18 }

还是看不懂为什么会锁住变量,主要是没办法根据这个试例进行实验,后经过各种查资料研究一遍遍的试代码,还有从别人博客中的只言片语中,发现有这么一句话:“QMutex::lock()获取一个锁”。

这说明只有一个锁,只能被一个QMutex得到,如果QMutex得不到这个锁,那它将不会执行紧随其后的代码,也就是在两个进程代码中需要共用一个QMutex类的实例,这样才能保证该实例是否获取到一个锁或者得不到一个锁。

如果QMutex::lock()得不到这个锁,那么它将会一直等直到得到该锁为止,而另一个方法QMutex::tryLock()可以检测当前是否可以得到这个锁,如果可以得到则返回1,否则返回0(不会一直等,但如果可以得到锁,那就拿到锁,不会光判断而不获取锁),该函数只执行一次,不会一直等到得到锁为止。

【Qt 5】Qt中QMutex的一点理解相关推荐

  1. mixin机制 vue_谈谈vue中mixin的一点理解

    谈谈vue中mixin的一点理解 vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用.最开始我一度认为这个和组件好像没啥区别..后来发现错了.下面我们来看看mixins和普通情 ...

  2. 关于C#中委托的一点理解

    C#中委托是一种类型.可以这么笼统的理解:int型变量代表一个整型,而委托类型的变量代表一个方法的地址(将方法名称传入constructor并实例化该委托变量). --By Brisk Yu 1 为何 ...

  3. vue中mixin的一点理解

    vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用.最开始我一度认为这个和组件好像没啥区别..后来发现错了.下面我们来看看mixins和普通情况下引入组件有什么区别? 组件在引 ...

  4. java 难度_java中难度大一点的面试题

    1.请大概描述一下Vector和ArrayList的区别,Hashtable和HashMap的区别.(5) (1)Vector和ArrayList的异同 实现原理,功能相同,可以互用 主要区别: Ve ...

  5. QT 烦人的parent该如何理解

    对话框是GUI程序和用户进行简短交互的顶层窗口,所谓顶层窗口即始终在主窗口之上显示.QDialog是Qt所有类型的对话框窗口的基类,它继承于QWidget,是一种容器类型组件.   QWidget是所 ...

  6. qt延时 QT中简单的延时办法

    来自 http://www.qtgtk.com/qt延时-qt中简单的延时办法/ QEventLoop eventloop; QTimer::singleShot(time, &eventlo ...

  7. Qt关于tabWidget中tab样式的重绘

    Qt关于tabWidget中tab样式的重绘 版本说明 版本 作者 日期 备注 0.1 loon 2018.12.29 初稿 目录 文章目录 Qt关于tabWidget中tab样式的重绘 版本说明 目 ...

  8. 【Qt】Qt学习笔记(更新中)

    文章目录 0x00 前言 0x01 Qt简介 1.1 Qt是什么 1.2 Qt发展史 1.3 Qt支持的平台 1.4 使用Qt开发的软件 1.5 Qt的优点 1.6 其它 0x02 创建Qt项目 2. ...

  9. qt 虚拟键盘中的几个瑕疵

    最近使用了下面楼主的虚拟键盘,总体还是挺好用的,只是有几个地方,需要完善下. 基于Qt的可用于嵌入式的虚拟键盘_偷段代码的博客-CSDN博客_qt 嵌入式虚拟键盘这几天完成了一个基于Qt的虚拟键盘的编 ...

最新文章

  1. 数据分析之CE找数据大法
  2. 【性能优化】面试官:Java中的对象和数组都是在堆上分配的吗?
  3. linux为系统分配内存,Linux操作系统知识讲解:走进Linux 内存分配算法
  4. 错误:pytube.exceptions.RegexMatchError
  5. 织梦电脑站手机站伪静态+全套伪静态规则-固定目录版
  6. final、finally与finalize的区别
  7. 产品经理应该干些啥?
  8. “约见”面试官系列之常见面试题之第五十三篇之网站的资源优化(建议收藏)
  9. 台达伺服电机选型手册_机械加工工艺师手册_打包下载
  10. c语言指针选择排序1,求助利用指针进行选择排序
  11. 开课吧Java课堂:如何利用valueOf( )方法实现数据转换
  12. NLP和CV的双子星,注入Mask的预训练模型BERT和MAE
  13. .NET MVC权限控制设计
  14. ffplay的音视频同步分析
  15. android9.0官方下载,安卓9.0系统安装包下载
  16. JAVE 视音频转码
  17. mt4怎么用云服务器跟单,免费好用的跟单系统 神速MT4跟单ea系统使用教程
  18. 【微信小程序】flex布局
  19. 无法登录到你的账户,通常可以通过从你的账户注销,然后重新登录
  20. 辅助分类器遇上Domain Adaptation:连续性与不确定性

热门文章

  1. 努力打卡 每天学习 不浪费每一天 Day67
  2. 为什么说程序员唯一出路是变成超级个体?
  3. CentOS下安装Redis
  4. jquery ajax实现聊天室,用jquery写了一个超简陋的ajax无刷新聊天室
  5. Maven+SSM框架项目实例
  6. 视频线的种类和简单介绍
  7. 帧间差分法python代码_OpenCV实现帧间差分法详解
  8. 【hexo系列】02.hexo和obsidian实现笔记丝滑
  9. nodejs购物系统app-计算机毕设 附源码90766
  10. 记一次 Ubuntu 分辨率问题(禁用nouveau导致)