QT互斥锁
- 创业
- 2025-09-06 23:36:01

一、概述
1、在多线程编程中,为了防止多个线程同时访问共享资源而导致的不确定性和错误,经常会使用互斥锁(Mutex)进行保护。
2、QMutex是Qt提供的一个互斥锁类,用于确保在同一时间只有一个线程访问共享资源。
3、QMutexLocker就是在使用QMutex时的便利工具类。它在构造函数中自动锁定给定的QMutex对象,并在析构函数中自动解锁。这样可以有效地保证锁的正确使用,避免由于异常或忘记解锁时而导致地资源泄露或死锁。
二、使用方式 方式一: mutex.lock(); //这里处理共享资源 mutex.unlock(); 方式二: QMutexLocker locker(&mutex); //这里处理共享资源 三、示例 1、未加锁: //共享资源 int sharedValue = 0; //互斥锁 QMutex mutex; class MThread : public QThread { public: void run() override { for(int i = 0; i < 5; i++) { // 访问共享资源 sharedValue++; qDebug() << "Thread ID: " << QThread::currentThreadId() << "Shared Value: " << sharedValue; msleep(1000); } } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); MThread thread1; MThread thread2; thread1.start(); thread2.start(); thread1.wait(); thread2.wait(); return a.exec(); }运行结果:
2、加锁后 : class MThread : public QThread { public: void run() override { for(int i = 0; i < 5; i++) { QMutexLocker locker(&mutex); // 访问共享资源 sharedValue++; qDebug() << "Thread ID: " << QThread::currentThreadId() << "Shared Value: " << sharedValue; // 线程休眠1秒 msleep(1000); } } };运行结果:
结果分析:明显看出在未加锁情况下对临界资源的访问出现混乱的结果