当前位置: 首页 > article >正文

QT 互斥锁

一、概述

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);
        }
    }
};

运行结果:

 结果分析:明显看出在未加锁情况下对临界资源的访问出现混乱的结果


http://www.kler.cn/a/548962.html

相关文章:

  • 计算机视觉:卷积神经网络(CNN)基本概念(一)
  • 2025寒假第三周周报
  • matlab功率谱反演法
  • 什么是信创?信创国产化改造建设实施方案,信创平台搭建,信创技术方案
  • 借3D视觉定位东风,汽车零部件生产线实现无人化的精准飞跃
  • ChatGPT行业热门应用提示词案例-AI绘画类
  • Windows 自动主题:Windows AutoTheme
  • DeepSeek R1 本地部署和知识库搭建
  • 深入探索 AI 提示词工程:让 AI 更懂你
  • Linux软件编程(2)
  • 力扣 66.加一 (Java实现)
  • 17二叉搜索树的lca、插入、删除
  • 动手实现一个PDF阅读器
  • 知识图谱Neo4j网页版的快速使用(详细教程:安装+基础使用)
  • stm32mp15x 之 M4 使用 canfd
  • 麒麟系统离线安装SVN
  • 大语言模型常用微调与基于SFT微调DeepSeek R1指南
  • 区块链安全:使用安全的数字孪生框架构建智能、健康的城市
  • 开业盛典活动策划方案拆解
  • 如何解决DeepSeek服务器繁忙的问题?