QT c++ 读写锁简单举例

//读写锁是一种同步工具,用于保护可以进行读写访问的资源

//如果您希望允许多个线程同时进行只读访问,则这种类型的锁非常有用,

//但是,一旦一个线程想要写入资源,就必须阻止所有其他线程,直到写入完成。

//在许多情况下,QReadWriteLock是QMutex的替代品。

//如果有许多并发读取并且写入不频繁,那么QReadWriteLock是一个不错的选择。

//1.全局变量定义

//1.1 全局变量定义头文件

#define GLOABAL_DEF_H

#include <QReadWriteLock>
extern QReadWriteLock lock;
extern int sharedData;

#endif // GLOABAL_DEF_H

//1.2 全局变量定义cpp文件

QReadWriteLock lock;
int sharedData = 0;

//2.线程A

//2.1 线程A头文件

#ifndef THREADA_H

#define THREADA_H

#include <QThread>

#include "gloabal_def.h"

class ThreadA:public QThread

{

public:

ThreadA();

void run();

};

#endif // THREADA_H

//2.2 线程A cpp文件

#include "threada.h"

ThreadA::ThreadA() {}

void ThreadA::run()

{

while(1)

{

lock.lockForWrite(); // 获取写锁

sharedData++;

lock.unlock();// 释放锁

QThread::msleep(100);

}

}

//3.线程B

//3.1 线程B头文件

#ifndef THREADB_H

#define THREADB_H

#include <QThread>

#include "gloabal_def.h"

#include <QDebug>

class ThreadB:public QThread

{

public:

ThreadB();

void run();

};

#endif // THREADB_H

//3.2线程B cpp文件

#include "threadb.h"

ThreadB::ThreadB() {}

void ThreadB::run()

{ while(1)

{

int value;

lock.lockForRead(); // 获取读锁

value = sharedData;

lock.unlock(); // 释放锁

qDebug()<<value;

QThread::msleep(90);

}

}

相关推荐
AI进化营-智能译站几秒前
ROS2 C++开发系列19-枚举定义机器人状态机|随机数生成仿真测试数据流
java·c++·ai·机器人
fengxin_rou1 分钟前
黑马点评项目万字总结:从redis基础到实战应用详解
java·开发语言·分布式·后端·黑马点评
zhouwy1132 分钟前
Golang 基础与实战笔记:从语法到微服务的全面指南
开发语言·go
灰子学技术4 分钟前
Envoy TCP 层面的 Metric 指标分析
开发语言·网络·网络协议·tcp/ip·php
迷途之人不知返8 分钟前
深入讨论模板
c++
清水白石00815 分钟前
生成器不是性能银弹:什么时候该用 `yield` 省内存,什么时候它会拖慢 Python 数据处理吞吐?
开发语言·python·原型模式
不甘先生17 分钟前
Go context 实战指南:从入门到生产级并发控制(架构师避坑手册)
开发语言·后端·golang
AI进化营-智能译站18 分钟前
ROS2 C++开发系列18-STL容器实战:deque缓存激光雷达数据|priority_queue调度任务
开发语言·c++·缓存·ai
hehelm32 分钟前
C++11 新特性
c++
初心未改HD32 分钟前
Go 泛型完全指南:从入门到实战
开发语言·golang