QReadWriteLock读写锁的一点测试(它是逻辑锁,并没有与实物相联系),只有锁住了读,才允许再次读,否则一概不允许
QReadWriteLock m_lock;
void MyWidget::Button1()
{
m_lock.lockForRead();
ShowMessage(tr("111"));
m_lock.lockForRead();
ShowMessage(tr("222"));
}
此时,111和222都可以顺利执行(第一个是锁住了进行读,第二个还是读数据,所以放行)
void MyWidget::Button1()
{
m_lock.lockForRead();
ShowMessage(tr("111"));
m_lock.lockForWrite();
ShowMessage(tr("222"));
}
此时,111可以执行,222不能执行(因为之前已经被锁住了,相当于正在读数据,所以想写入内容的话,不行)
void MyWidget::Button1()
{
m_lock.lockForWrite();
ShowMessage(tr("111"));
m_lock.lockForRead();
ShowMessage(tr("222"));
}
此时,111可以执行,222不能执行(第一个正在写,第二个想读,当然没法进入)
void MyWidget::Button1()
{
m_lock.lockForWrite();
ShowMessage(tr("111"));
m_lock.lockForWrite();
ShowMessage(tr("222"));
}
此时,111可以执行,222不能执行(第一个正在写,第二个也想写,当然没法进入)
----------------------------------------------------------------------------------------------------------
经过一夜的测试,
void MyWidget::Button1()
{
m_lock.lockForWrite();
ShowMessage(tr("111"));
m_lock.lockForRead();
ShowMessage(tr("222"));
}
的效果是,第二天还停在哪里,但程序没有崩溃。算是一个好消息(这个就是不能重复上锁的效果?)。
最新文章
- plsql配置
- tomcat8和7关于自定义tag的处理区别
- Android客户端稳定性测试——Monkey
- 骨骼动画的实现(OpenGL实现)
- 使用PhoneGap搭建一个山寨京东APP
- jsp自定义标签(时间格式化包括Long转时间)
- 介绍WEB站点结构
- Leetcode | Parentheses 相关
- oracle添加日志表
- discuz x2 diy 模块的样式点击不管用,模块的数据、标题都可以编辑
- python sys.argv[]
- Qt---- 点击按钮调用另一个窗口Ui
- 数据结构【一】:简单队列simple queue
- Step-by-Step XML Free Spring MVC 3 Configuration--reference
- 华为oj 计算字符个数
- Linux环境进程间通信(三):消息队列
- 使用BEM命名规范来组织CSS代码
- IIS7下设置https主机名灰色无法修改
- 第1章 HTTP协议基本介绍了解
- RabbitMQ学习之旅(一)
热门文章
- information_schema.collations 学习
- Nginx 的 Location 配置指令块
- TD数量不确定时如何让其宽度平均分布
- MotionEvent的getX(),getY()与getRawX(),getRawY()区别
- httrack,webdup,WinHTTrack,WebZip
- C语言中long类型,int类型
- nginx监听端口和反向代理端口的权限问题
- BFS visit tree
- Remove Duplicates from Sorted List II 解答
- 一起来学canvas (前言)