Qt 使用互斥锁

1、官方文档:

QMutex类提供线程间的访问序列化。
QMutex的目的是保护一个对象、数据结构或代码片段,
这样每次只有一个线程可以访问它(这类似于Java synchronized关键字)。
通常最好将互斥对象与QMutexLocker一起使用,因为这样可以很容易地确保一致地执行锁定和解锁。

2、官方示例:

 QMutex mutex;
 int number = 6;

 void method1()
 {
     mutex.lock();
     number *= 5;
     number /= 4;
     mutex.unlock();
 }

 void method2()
 {
     mutex.lock();
     number *= 3;
     number /= 2;
     mutex.unlock();
 }

3、配合QMutexLocker使用

单独使用QMutex时,每次都需要加锁、解锁,显得不太方便,QMutex配合QMutexLocker使用是比较推荐的方法:
首先需要注意的是:QMutexLocker这个类是基于QMutex的便利类,这个类不能够定义私有成员变量和 全局变量,只能够定义局部变量来使用。
使用方法:
1.先定义一个QMutex类的变量
QMutex mutex; (可以是私有成员变量,也可以是全局变量)
2.在定义一个QMutexLocker类的变量(注意:在需要上锁的地方直接定义即可)
QMutexLocker locker(&mutex);

#include <QMutex> 
...
private:
    QMutex mutex;
...

 QMutex mutex;
 int number = 6;

 void method1()
 {
     QMutexLocker locker(&mutex);
     number *= 5;
     number /= 4;
 }

 void method2()
 {
	 QMutexLocker locker(&mutex);
     number *= 3;
     number /= 2;
 }

这样,QMutexLocker上锁,解锁的原理:在该局部变量被创建的时候上锁,当所在函数运行完毕后该QMutexLocker局部变量在栈中销毁掉,根据他自己的机制也就相对应的解锁了。注意,如果该局部变量在中间被打断,那么QMutexLocker上的锁就不会被解锁掉,因为该函数没有被完整地执行完。

QMutexLocker还提供了一个成员函数:QMutex * QMutexLocker::mutex () const

返回在QMutexLocker构造函数中被锁定的互斥量(QMutexLocker正在操作的互斥对象)。这对于需要访问互斥锁的代码很有用,比如QWaitCondition::wait()。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值