文章目录
一、QReadWriteLock和QWriteLocker、QReadLocker(个人理解)
- 一、QReadWriteLock和QWriteLocker、QReadLocker(个人理解)
- 二、QWriteLocker、QReadLocker的使用
- 总结
- 相关文章
使用读写锁时,配合使用QWriteLocker和QReadLocker相对于单纯使用QReadWriteLock会更方便(如同QMutex和QMutexLocker的关系,友友们可以通过文末相应链接查看该内容)。 如单纯使用QReadWriteLock函数,线程在进入和退出的位置需要调用上锁和解锁函数,在代码结构复杂,内容繁琐的情况使用容易出现死锁问题;而QReadLocker和QWriteLocker就简化了读写锁的上锁、解锁操作,只需要在线程需要上锁的位置定义一个局部变量的QReadLocker或QWriteLocker并传入读写锁指针,该局部变量就会自动上锁,在其作用域结束时会将读写锁解锁
友情提示:若是没看过Qt读写锁(QReadWriteLock)的使用、读写锁的验证(含源码+注释),建议先看查看该内容
二、QWriteLocker、QReadLocker的使用例子是将Qt读写锁(QReadWriteLock)的使用、读写锁的验证(含源码+注释)线程类中的run更改(直接将下方的run函数替换成该线程类中的run即可),代码如下:
void CThread::run()
{
int i = 0;
//循环输出当前标识符4次
while(i++ != 4)
{
if(0 == m_flag)
{
//创建简化的写入锁对象,创建好并添加读写锁,自动将写入锁锁定,作用域结束时解锁
QWriteLocker writeLocker(m_sLock);
writeFunc(); //数据操作的内容
}
else if(1 == m_flag)
{
//创建简化的读取锁对象,创建好并添加读写锁,自动将读取锁锁定,作用域结束时解锁
QReadLocker readLocker(m_sLock);
readFunc1(); //数据读取的内容
}
else
{
//创建简化的读取锁对象,创建好并添加读写锁,自动将读取锁锁定,作用域结束时解锁
QReadLocker readLocker(m_sLock);
readFunc2(); //数据读取的内容
}
}
qDebug()
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?