办公家具网站模版,工业设计本科生作品集,做众筹网站要什么资质,灌阳县建设局门户网站一、概述
1、在多线程编程中#xff0c;为了防止多个线程同时访问共享资源而导致的不确定性和错误#xff0c;经常会使用互斥锁#xff08;Mutex#xff09;进行保护。
2、QMutex是Qt提供的一个互斥锁类#xff0c;用于确保在同一时间只有一个线程访问共享资源。
3、QM…一、概述
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);}}
};
运行结果 结果分析明显看出在未加锁情况下对临界资源的访问出现混乱的结果