Qt:QReadWriteLock
2024-09-05 10:53:43
0、说明
QReadWriteLock类提供了读写锁。
读写锁是一种保护那些可以读写的资源的同步工具,如果有多个线程同时要进行读操作,但是有一个线程想要写入,那么所有其他线程都会等待直到这个写线程完成。
在许多情况下,QReadWriteLock是QMutex的竞争者。在读写并发操作不是很频繁时,用QReadWriteLock将是一个很好的选择。
例子
QReadWriteLock lock; void ReaderThread::run()
{
...
lock.lockForRead();
read_file();
lock.unlock();
...
} void WriterThread::run()
{
...
lock.lockForWrite();
write_file();
lock.unlock();
...
}
为了避免写进程永远被读进程阻塞,当有写进程由于等待而被阻塞时,读进程将不会获得锁,即使现在该锁正在被其他读进程设置。另外,当锁正在被一个写进程设置,此时又有另一个写进程进入时,新的写进程将获得比其他读进程更高的优先级。
就像QMutex那样,QReadWriteLock如果在构造时指定QReadWriteLock::Recursive as QReadWriteLock::RecursionMode,那么允许某个线程多次加锁。这种情况下,调用了多少次lockForWrite() 或 lockForRead(),就要有多少个unlock()。不能在一个线程中同时加读锁和写锁,这两种锁只能先后进行而不能同时进行。
1、模块和加载项
Header: | #include <QReadWriteLock> |
qmake: | QT += core |
2、构造
QReadWriteLock(QReadWriteLock::RecursionMode recursionMode = NonRecursive) | 用给定recursionMode构造一个QReadWriteLock对象 |
3、静态字段
enum | RecursionMode { Recursive, NonRecursive } | 是否允许多次加锁 |
6、实例方法
返回值类型 |
方法 |
说明 |
void | lockForRead() | 读锁 |
void | lockForWrite() | 写锁 |
bool |
tryLockForRead(int timeout) |
尝试加读锁,成功时返回true,如果另一个进程正在写,返回false 尝试加读锁,如果另一个进程正在写,会等待至多timeout毫秒,成功返回true,否则false |
bool |
tryLockForWrite(int timeout) |
尝试加写锁 尝试加写锁,最多等timeout毫秒 |
void | unlock() | 解锁 |
最新文章
- 20155315庄艺霖--对做中学的理解及对c语言和Java的看法
- C/C++中数组转换成指针的情况
- HDU3157 Crazy Circuits(有源汇流量有上下界网络的最小流)
- CodeIgniter 让控制器可以支持多级子目录的 Router 类库
- Node.js log4js日志记录
- android 四大组件Broadcast Receiver
- Memcache应用场景介绍,说明
- fedora 20 install skype
- (六)backbone - API学习 - Backbone路由
- 使用Win32::OLE操作Excel——Excel对象模型
- Unity3D Object.DontDestroyOnLoad 备忘
- 2 WAN 和1 Evo/3g Routeros PCC 方法负载平衡
- 2D 和 3D 中的 CSS 轉換 (Preliminary) CSS3中 translate3D详解
- jq获取浏览器的高度
- Dora.Interception, 为.NET Core度身打造的AOP框架[4]:演示几个典型应用
- WebService详解(二)
- Vagrant Ansible Playbook 安装一群虚拟机
- 解决Android Studio出现Failed to open zip file. Gradle&#39;s dependency cache may be corrupt的问题
- 力扣(LeetCode) 14. 最长公共前缀
- 20155326 2017-2018-1 《信息安全系统设计基础》课下加分项mypwd实现