笔记:Qt开发之多线程同步互斥机制

本文详细介绍了Qt框架中用于多线程同步的几种重要类,包括互斥锁(QMutex)、QMutexLocker、读写锁(QReadWriteLock)、信号量(QSemaphore)和条件变量(QWaitCondition),阐述了它们的特点、使用场景和示例应用。
摘要由CSDN通过智能技术生成

目标:了解Qt多线程开发中常用的同步互斥类,使用场景和特点

 

实现线程互斥和同步常用的类

互斥锁:QMute、QMutexLocker

条件变量:QWaitCondition

信号量:QSemaphore

读写锁:QReadLocker、QWriteLocker、QReadWriteLock

1,QMutex

特点:QMutex 是 Qt 框架提供的互斥锁类,用于保护共享资源的访问,实现线程间的互斥操作。

用途:在多线程环境下,通过互斥锁来控制对共享数据的访问,确保线程安全。

QMutex mutex;
// 上锁
mutex.lock();
// 访问共享资源
// ...
// 解锁
mutex.unlock();

2,QMutexLocker

特点:QMutexLocker 是 QMutex 的辅助类,使用 RAII(Resource Acquisition Is Initialization)方式对互斥锁进行上锁和解锁操作。

用途:简化对互斥锁的上锁和解锁操作,避免忘记解锁导致的死锁等问题。

QMutex mutex;

{
    QMutexLocker locker(&mutex); // 在作用域内自动上锁
    // 访问共享资源
    // ...
} // 在作用域结束时自动解锁

3,QReadWriteLocker、QReadLocker、QWriteLocker

特点:

QReadWriteLock 是读写锁类,用于控制读和写的并发访问。

QReadLocker 用于读操作上锁,允许多个线程同时读取共享资源。

QWriteLocker 用于写操作上锁,只允许一个线程写入共享资源。

用途:在某些情况下,多个线程可以同时读取共享数据,但只有一个线程能够进行写操作。读写锁提供了更高效的并发访问方式。

QReadWriteLock rwLock;

// 在读操作中使用读锁
{
    QReadLocker locker(&rwLock); // 在作用域内自动上读锁
    // 读取共享资源
    // ...
} // 在作用域结束时自动解读锁

// 在写操作中使用写锁
{
    QWriteLocker locker(&rwLock); // 在作用域内自动上写锁
    // 修改共享资源
    // ...
} // 在作用域结束时自动解写锁

4,QSemaphore

特点:QSemaphore 是 Qt 框架提供的计数信号量类,用于控制同时访问共享资源的线程数量。

用途:限制并发线程数量,用于解决一些资源有限的问题

信号量的典型用例是控制生产者/消费者之间共享的环形缓冲区。

QSemaphore semaphore(2); // 同时允许两个线程访问共享资源

// 在需要访问共享资源的线程中
semaphore.acquire(); // 尝试获取信号量,若已满则阻塞
// 访问共享资源
// ...
semaphore.release(); // 释放信号量

// 在另一个线程中进行类似操作

5,QWaitCondition

特点:QWaitCondition 是 Qt 框架提供的条件变量类,用于线程之间的消息通信和同步。

用途:在某个条件满足时等待或唤醒线程,用于线程的同步和协调。

QMutex mutex;
QWaitCondition condition;

// 在等待线程中
mutex.lock();
// 检查条件是否满足,若不满足则等待
while (!conditionFullfilled()) {
    condition.wait(&mutex); // 等待条件满足并释放锁
}
// 条件满足后继续执行
// ...
mutex.unlock();

// 在改变条件的线程中
mutex.lock();
// 改变条件
changeCondition();
condition.wakeAll(); // 唤醒等待的线程
mutex.unlock();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值