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

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

运行结果:

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

相关文章:

  • 初识React
  • 2025年 Java 技术的新趋势
  • FreeRTOS第3篇:链表的“精密齿轮”——列表与列表项
  • ubuntu桌面东西没了,右键只有更换壁纸,显示设置和设置
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_ssl_init 函数
  • 常用的网络安全设备
  • 我的docker随笔46:在x86平台构建龙芯镜像
  • (三)Axure制作转动的唱片
  • 牛客刷题自留-机械学习基础
  • 【LeetCode】438.找到字符串中所有的字母异位词
  • 【MySQL】# Windows下安装(压缩包、msi);Linux下安装(压缩包、命令、docker);设置连接数、binlog日志;修改时区
  • HTML之JavaScript循环结构
  • 详解Redis数据结构(附源码)
  • Visonpro 检测是否有缺齿
  • 【Flink快速入门-5.流处理之多流转换算子】
  • STM32的DMA解释
  • Go语言精进之路读书笔记(第二部分-项目结构、代码风格与标识符命名)
  • 案例-05.部门管理-新增
  • 数据大屏炫酷UI组件库:B端科技风格PSD资源集
  • RISC-V平台编译 state-thread x264 ffmpeg zlog
  • 韩国法院将李在明所涉案件重审日期延至大选后
  • 魔都眼|上海多家商场打开绿色通道,助力外贸出口商品转内销
  • 中方对原产印度进口氯氰菊酯实施反倾销措施,商务部回应
  • 俄乌交换205名被俘人员,俄方人员已抵达白俄罗斯
  • 原四川省农村信用社联合社党委副书记、监事长杨家卷被查
  • 想要“逆转”糖尿病,减少这两处脂肪是关键