Qlist 读写锁示例
时间: 2023-09-27 10:12:08 浏览: 92
QReadWriteLock是Qt提供的读写锁实现类,它可以提高多线程程序的效率。下面是一个QReadWriteLock的示例:
```c++
#include <QCoreApplication>
#include <QReadWriteLock>
#include <QThread>
#include <QDebug>
QReadWriteLock rwLock; // 创建读写锁
int data = 0; // 共享数据
void readData() // 读线程
{
while (true) {
rwLock.lockForRead(); // 获取读锁
qDebug() << "Read data:" << data;
rwLock.unlock(); // 释放读锁
QThread::msleep(500);
}
}
void writeData() // 写线程
{
while (true) {
rwLock.lockForWrite(); // 获取写锁
data++; // 修改共享数据
qDebug() << "Write data:" << data;
rwLock.unlock(); // 释放写锁
QThread::msleep(1000);
}
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 创建两个读线程和一个写线程
QThread thread1, thread2, thread3;
QObject::connect(&thread1, &QThread::started, readData);
QObject::connect(&thread2, &QThread::started, readData);
QObject::connect(&thread3, &QThread::started, writeData);
thread1.start();
thread2.start();
thread3.start();
return a.exec();
}
```
在这个示例中,我们创建了一个全局的QReadWriteLock对象rwLock和一个共享变量data。同时,我们创建了两个读线程和一个写线程,读线程不断地读取共享变量data的值,写线程不断地修改data的值。我们通过lockForRead()和unlock()方法获取和释放读锁,通过lockForWrite()和unlock()方法获取和释放写锁。这样,我们就实现了读写锁的功能,保证多个线程能够安全地访问共享数据。
阅读全文