• 概述

QMutex 类使得线程之间可序列化,文档中的描述为provides access serialization between threads

它被设计的初衷是用来保护一个对象、数据结构、代码段、使得它们在同一一时刻,只有一个线程有访问权限(这有点跟java中的synchronized关键字类似)。

  • 场景

比如我们有如下的代码片段:

 int number = ;

 void method1()
{
number *= ;
number /= ;
} void method2()
{
number *= ;
number /= ;
}

假如method1()和method2()不在同一线程中,则nunber就成为临界资源,这个时候,为了保证在同一时刻只有一个线程能够使用number,就可以使用Qmutex,具体代码如下:

 QMutex mutex;
int number = ; void method1()
{
mutex.lock();
number *= ;
number /= ;
mutex.unlock();
} void method2()
{
mutex.lock();
number *= ;
number /= ;
mutex.unlock();
}
  • 提供的成员变量以及成员方法

public type:

  1. enum RecursionMode{Recursive,NonRecursive}

RecursionMode有两种值,分别是1和0,1表示Recursive 在这个模式下,一个线程可以lock多次相同的互斥量,直到相应数量的unlock被调用才能被解锁;0表示一个线程仅可以锁互斥量一次,不可递归。

public functions:

  1. QMutex(RecursionMode mode = NonRecursive)

构造函数,构造一个新的mutex,这个mutex创建之后处于unlock状态。RecursionMode的默认值为0

  1. bool isRecursive()

如果mutex为递归,则返回true。

  1. void lock()

给mutex加锁,如果mutex被另一个线程加了锁,则阻塞直到另一个线程释放锁。处于0模式时将其递归加锁会造成死锁,如果处于1模式,则可以对其多重加锁。

  1. bool tryLock(int timeout = 0)

试着去给一个互斥量加锁,如果这个互斥量没被锁,则返回true,如果被锁,则等待timeout时间,等待其他线程释放锁,当timeout为负数时,一直等待。

  1. void unlock()

给mutex解锁,给一个未lock的mutex解锁,将有不可预知的结果,尝试去给不同的线程中的mutex解锁,会导致错误。

最新文章

  1. WebGL on iOS8 终于等到了这一天
  2. 【niubi-job——一个分布式的任务调度框架】----niubi-job这下更牛逼了!
  3. Get value from agent failed: cannot connect to [[192.168.186.130]:10050]: [113]No route to host
  4. Dlib is a modern C++ toolkit(非常全面的类库)
  5. css+js 控制幻灯片效果
  6. 单线多拨,傻瓜式openwrt单线多拨叠加速率教程
  7. Html辅助方法 之 Form表单标签
  8. 用命令行在github新建一个项目
  9. IDEA- idea代码调试debug
  10. 51Nod 1091 线段的重叠(贪心+区间相关,板子题)
  11. Leetcode_48_Rotate Image
  12. 一致性环Hash算法.NET实现
  13. Best Chrome Extensions
  14. public private protected extends
  15. Oracle中的rowid
  16. [转]JAVA并发编程学习笔记之Unsafe类
  17. Spring Cloud 入门 之 Eureka 篇(一)
  18. FP回写报错
  19. asp get与post获取的区别
  20. Memory及其controller芯片整体测试方案(下篇)

热门文章

  1. [转]安装SharePoint 2013时安装AppFabric失败(错误码:1603)
  2. SharePoint 2013 SP1发布了
  3. Solr整合Ansj中文分词器
  4. zookeeper是什么?原理是什么?【转】
  5. Jmeter beanshell 生成手机号加密签名
  6. C#运算符大全_各种运算符号的概述及作用
  7. 2016年Java服务器端开发面试总结
  8. ReactNative win10初体验
  9. cat > file << EOF 的用法
  10. 调用百度地图API出现 error inflating class com.baidu.mapapi.map.mapview