Qt之QMutex
来源:互联网 发布:非凡软件站手机版 编辑:程序博客网 时间:2024/05/29 15:26
Qt之QMutex
概述
QMutex 类使得线程之间可序列化,文档中的描述为provides access serialization between threads
它被设计的初衷是用来保护一个对象、数据结构、代码段、使得它们在同一一时刻,只有一个线程有访问权限(这有点跟java中的synchronized关键字类似)。
场景
比如我们有如下的代码片段:
1 int number = 6;
2
3 void method1()
4 {
5 number *= 5;
6 number /= 4;
7 }
8
9 void method2()
10 {
11 number *= 3;
12 number /= 2;
13 }
假如method1()和method2()不在同一线程中,则nunber就成为临界资源,这个时候,为了保证在同一时刻只有一个线程能够使用number,就可以使用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 }
提供的成员变量以及成员方法
public type:
enum RecursionMode{Recursive,NonRecursive}
RecursionMode有两种值,分别是1和0,1表示Recursive 在这个模式下,一个线程可以lock多次相同的互斥量,直到相应数量的unlock被调用才能被解锁;0表示一个线程仅可以锁互斥量一次,不可递归。
public functions:
QMutex(RecursionMode mode = NonRecursive)
构造函数,构造一个新的mutex,这个mutex创建之后处于unlock状态。RecursionMode的默认值为0
bool isRecursive()
如果mutex为递归,则返回true。
void lock()
给mutex加锁,如果mutex被另一个线程加了锁,则阻塞直到另一个线程释放锁。处于0模式时将其递归加锁会造成死锁,如果处于1模式,则可以对其多重加锁。
bool tryLock(int timeout = 0)
试着去给一个互斥量加锁,如果这个互斥量没被锁,则返回true,如果被锁,则等待timeout时间,等待其他线程释放锁,当timeout为负数时,一直等待。
void unlock()
给mutex解锁,给一个未lock的mutex解锁,将有不可预知的结果,尝试去给不同的线程中的mutex解锁,会导致错误。
概述
QMutex 类使得线程之间可序列化,文档中的描述为provides access serialization between threads
它被设计的初衷是用来保护一个对象、数据结构、代码段、使得它们在同一一时刻,只有一个线程有访问权限(这有点跟java中的synchronized关键字类似)。
场景
比如我们有如下的代码片段:
1 int number = 6;
2
3 void method1()
4 {
5 number *= 5;
6 number /= 4;
7 }
8
9 void method2()
10 {
11 number *= 3;
12 number /= 2;
13 }
假如method1()和method2()不在同一线程中,则nunber就成为临界资源,这个时候,为了保证在同一时刻只有一个线程能够使用number,就可以使用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 }
提供的成员变量以及成员方法
public type:
enum RecursionMode{Recursive,NonRecursive}
RecursionMode有两种值,分别是1和0,1表示Recursive 在这个模式下,一个线程可以lock多次相同的互斥量,直到相应数量的unlock被调用才能被解锁;0表示一个线程仅可以锁互斥量一次,不可递归。
public functions:
QMutex(RecursionMode mode = NonRecursive)
构造函数,构造一个新的mutex,这个mutex创建之后处于unlock状态。RecursionMode的默认值为0
bool isRecursive()
如果mutex为递归,则返回true。
void lock()
给mutex加锁,如果mutex被另一个线程加了锁,则阻塞直到另一个线程释放锁。处于0模式时将其递归加锁会造成死锁,如果处于1模式,则可以对其多重加锁。
bool tryLock(int timeout = 0)
试着去给一个互斥量加锁,如果这个互斥量没被锁,则返回true,如果被锁,则等待timeout时间,等待其他线程释放锁,当timeout为负数时,一直等待。
void unlock()
给mutex解锁,给一个未lock的mutex解锁,将有不可预知的结果,尝试去给不同的线程中的mutex解锁,会导致错误。
阅读全文
0 0
- Qt之QMutex
- QT之使用QMutex/ QMutexLocker互斥量同步线程小例子
- qt QMutex(互斥量)
- Qt多线程编程: QMutex
- Qt之多线程-QMutex
- QMutex
- QMutex
- QMutex
- QMutex
- QT——QMutex(互斥量)
- Qt 线程同步(QMutex、QWaitCondition、QSemaphore)
- Qt多线程编程总结(二)——QMutex
- Qt多线程编程总结(二)——QMutex
- Qt多线程编程总结(二)——QMutex
- Qt多线程编程(2)——QMutex的使用
- Qt多线程编程总结(二)——QMutex .
- [转]Qt多线程编程总结(二)——QMutex
- QT原子操作QAtomic API和锁QMutex
- 关于theano和keras的一些安装总结
- 题目1037:Powerful Calculator
- Unity3D添加视频文件
- STM32驱动LCD12864显示屏
- leetcode-wordbreak
- Qt之QMutex
- [笔记分享] [Hardware] PM8901 User Guide study report
- [编程题]奖学金
- 在使用ILSpy对c# dll进行反编译时遇到的问题及处理方式
- Python网站的漏洞如何检查?
- strtoc函数原码剖析
- QGC的MainWindow
- python爬虫学习第二十六天
- phpstudy本地搭建域名访问