QT线程(二)---线程同步

本文介绍了QT线程同步的方法,包括QMutex用于线程互斥,QMutexLocker简化加解锁操作,防止死锁,QReadLocker、QWriteLocker、QReadWriteLocker管理读写权限,以及QSemaphore解决生产者-消费者问题,保护多个资源的并发访问。
摘要由CSDN通过智能技术生成

线程互斥

       多线程运行时,通常会访问同一个变量,同一个数据结构,或者同一段代码。因此,需要使用互斥技术来保护上述资源,确保多线程执行的正确性。

注:

我们通常说某个函数是线程安全的,也就是因为该函数实现加入了线程互斥保护。

 

 

       4.1QMutex

 

QMutex ( RecursionMode mode = NonRecursive )

 

~QMutex ()

void

lock ()

mutex加锁,如果当前其他线程已对该mutex加锁了,则该调用被阻塞直到其他线程释放该mutex

bool

tryLock ()

mutex加锁,和lock不同的是,如果当前其他线程已对该mutex加锁了,则该调用会立即返回,而不被阻塞。

bool

tryLock ( int timeout )

tryLock,和tryLock不同的是,如果当前其他线程已对该mutex加锁了,则该调用会等待一段时间,直到超时或者其他线程释放了mutex

void

unlock ()

mutex解锁,释放被锁住的资源。

 

       Mutex有两种模式,用户可以在构造函数参数中指定。

      

Constant

Value

Description

QMutex::Recursive

1

In this mode, a thread can lock the same mutex multiple times and the mutex won't be unlocked until a corresponding number of unlock() calls have been made.

该模式下,一个线程可以对mutex多次lock,直到相应次数的unlock,调用后,该mutex才真正被unlock

QMutex::NonRecursive

0

In this mode, a thread may only lock a mutex once.

该模式下,mutex只能被lock一次。

 

 

实例:

QMutex mutex;
 int number = 6;
 
 void method1()
 {
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值