您的位置:首页 > 其它

线程使用之读写锁

2017-06-01 10:13 141 查看
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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: