在Qt中,读写锁(QReadWriteLock)用于实现多线程下对共享数据的读写操作。以下是一个简单的使用示例:
#include <QtCore/QCoreApplication>
#include <QtCore/QReadWriteLock>
#include <QtCore/QThread>
QReadWriteLock lock;
int sharedData = 0;
void readerThread()
{
while (true) {
// 加读锁
lock.lockForRead();
// 读取共享数据
qDebug() << "Reader thread" << QThread::currentThreadId() << "reads:" << sharedData;
// 解锁
lock.unlock();
// 线程休眠一段时间
QThread::msleep(1000);
}
}
void writerThread()
{
int value = 1;
while (true) {
// 加写锁
lock.lockForWrite();
// 修改共享数据
sharedData += value;
qDebug() << "Writer thread" << QThread::currentThreadId() << "writes:" << sharedData;
// 解锁
lock.unlock();
// 线程休眠一段时间
QThread::msleep(2000);
}
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QThread reader;
QObject::connect(&reader, &QThread::started, readerThread);
QThread writer;
QObject::connect(&writer, &QThread::started, writerThread);
reader.start();
writer.start();
return a.exec();
}
这是一个简单的多线程示例,包括一个读线程和一个写线程。通过使用lockForRead()
和lockForWrite()
方法获取锁来保证在读写过程中的互斥性。注意,在读取共享数据时使用读锁,而在修改共享数据时使用写锁。
请根据实际需求进行适当调整,并确保线程安全的访问共享数据。
内容由零声教学AI助手提供,问题来源于学员提问