readwritelock.h
#include <QThread>
class ReadThread : public QThread
{
public:
ReadThread();
protected:
void run();
};
class WriteThread : public QThread
{
public:
WriteThread();
protected:
void run();
};
readwritelock.cpp
#include "readwritelock.h"
#include <QDebug>
#include <QReadWriteLock>//读写锁
QReadWriteLock rwLock;
int global2 = 0;
ReadThread::ReadThread()
{
}
void ReadThread::run()
{
while(1)
{
//qDebug() << rwLock;//error
rwLock.lockForRead();//上读锁
qDebug()<< currentThreadId()
<< ", Read:"
<< global2;
qDebug() << "read finished!-----------";
rwLock.unlock();//解锁
sleep(1);
}
}
WriteThread::WriteThread()
{
}
void WriteThread::run()
{
while(1)
{
rwLock.lockForWrite();//上写锁
int tmp = global2;
global2++;
qDebug()<< currentThreadId()
<< ", Write: "
<< tmp
<< "-->"
<< global2;
qDebug() << "write finished!===================";
rwLock.unlock();//解锁
sleep(1);
}
}
main.cpp
#include <QApplication>
#include <QThread>
#include "readwritelock.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
WriteThread *w1 = new WriteThread;
WriteThread *w2 = new WriteThread;
ReadThread *r = new ReadThread;
ReadThread *r2 = new ReadThread;
w1->start();
w2->start();
r->start();
r2->start();
return a.exec();
}