• 概述

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解锁,会导致错误。

Qt之QMutex的更多相关文章

  1. Qt:QMutex

    0.说明 QMutex类提供了线程间的同步控制. QMutex的目的是,保护Object.数据结构.代码块,以便每次只有一个线程能访问它(类似Java中的synchronized关键字).不过更好的情 ...

  2. Qt 多线程 详细函数说明及其事例

    转:http://www.cnblogs.com/hicjiajia/archive/2011/02/03/1948955.html Qt线程类 Qt 包含下面一些线程相关的类:QThread 提供了 ...

  3. Qt多线程(有详细例子)

    Qt线程类 Qt 包含下面一些线程相关的类:QThread 提供了开始一个新线程的方法QThreadStorage 提供逐线程数据存储QMutex  提供相互排斥的锁,或互斥量QMutexLocker ...

  4. Qt同步线程(比较清楚,而且QMutex QMutexLocker QReadWriteLock QSemaphore QWaitCondition 每个都有例子)

    Qt同步线程 我们知道,多线程有的时候是很有用的,但是在访问一些公共的资源或者数据时,需要进行同步,否则会使数据遭到破坏或者获取的值不正确.Qt提供了一些类来实现线程的同步,如QMutex,QMute ...

  5. Qt线程同步操作用QWaitCondition QMutex

    可以看到Qt提供了一个等待事件发生的类QWaitCondition,当条件满足时可以唤醒其它等待的线程. 写一个类可以在线程间实现同步功能 #ifndef THREADEVENT_H #define ...

  6. Qt同步线程(QMutex QMutexLocker QReadWriteLock QSemaphore QWaitCondition )

    Qt同步线程 我们知道,多线程有的时候是很有用的,但是在访问一些公共的资源或者数据时,需要进行同步,否则会使数据遭到破坏或者获取的值不正确.Qt提供了一些类来实现线程的同步,如QMutex,QMute ...

  7. Qt 互斥量 QMutex

    QMutex类提供了一种保护一个变量和一段代码的方法. mutex.lock() //锁住互斥量(mutex).如果互斥量是解锁的,那么当前线程就立即占用并锁定它.否则,当前线程就会被阻塞,知道掌握这 ...

  8. Qt中暂停线程的执行(利用QMutex,超级简单明了)

    在线程中定义一个信号量: QMutex pause;把run()函数中循环执行的部分用信号量pause锁住: void run() { while(1) { pause.lock(); //循环执行的 ...

  9. Qt多线程编程总结(二)——QMutex

    QMutex类提供的是线程之间的访问顺序化. QMutex的目的是保护一个对象.数据结构或者代码段,所以同一时间只有一个线程可以访问它.(在Java术语中,它和同步关键字“synchronized”很 ...

随机推荐

  1. Cookie实现商品浏览记录--方式一:Java实现

    方式一:Java代码方式实现:此种方式实现思路较为顺畅.难点在于,如何实现将最近浏览的产品显示在最前面:实现方式是借助LinkedList提供的remove()方法,先将此id从列表中移除,然后再借助 ...

  2. (Collection)347. Top K Frequent Elements

    Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...

  3. phoenix 索引修复-基本流程

    索引修复基本流程

  4. 魅蓝note2在ubuntu14.04下mtp模式无法自动mount的解决方法

    是因为新机型没在列表里的原因. 处理方法如下: As far as I know, MTP works fine in Trusty. You can try this: Uncomment #use ...

  5. VMware Workstation 11, 客户机Ubuntu14.04.1 LTS 64bit,宿主机Windows 8.1 64bit,剪贴板共享(copy and paste)失效问题

    Ubuntu14.04是从12.04升级上来的,因为GUI性能的原因相继装了Xubunbu和Lubuntu的包(Lubuntu的桌面果然轻量级,但是请神容易送神难,卸载Xubuntu很麻烦,就先放下了 ...

  6. 标准C++中的string类的用法总结

    标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...

  7. 树莓派摄像头模块转成H264编码通过RTMP实现Html输出

    官方原帖 http://www.raspberrypi.org/phpBB3/viewtopic.php?f=43&t=45368&sid=b81f6551e478f0f6e172aa ...

  8. oracle 邮件发送

    CREATE OR REPLACE PROCEDURE PRC_sendmail(p_receiver VARCHAR2, -- 邮件接收人                               ...

  9. ORA-12520:TNS:监听程序无法为请求的服务器类型找到可用的处理程序

    连接数太多 关掉没用的 plsql

  10. @RequestMapping用法详解

    @RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. RequestMapping注解有六个属性,下面我们把 ...