您当前的位置: 首页 > 

令狐掌门

暂无认证

  • 0浏览

    0关注

    513博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

基于QReadWriteLock的线程同步

令狐掌门 发布时间:2019-08-19 21:33:39 ,浏览量:0

         在使用互斥量时会有一个问题,每次只能有一个线程获得互斥量的权限。如果在一个程序中有多个程序需要读取该变量,那么就会出现排队等待现象,降低了程序的性能。

​         例如在做数据采集时,会涉及到采集,显示,保存,如果数据量很大,此时我们用3个线程来处理,采集线程,数据显示线程,数据保存线程。

​         例如下面的伪代码

int buf[100];
QMutex mutex;

void CollectThread::run()
{
	mutex.lock();
	CollectData();
	mutex.unlock();
}

void ShowThread::run()
{
	mutex.lock();
	ShowBuffer();
	mutex.unlock();
}

void SaveThread::run()
{
	mutex.lock();
	SaveData();
	mutex.unlock();
}

         上面有问题,3个线程每一只能有一个线程能访问到buffer,  而实际上只有两个操作,采集数据到内存中,再从内存中读取数据保存,显示。

​         Qt提供了QReadWrite类,基于读写模式对线程代码段的保护,他可以允许多个线程以只读的方式访问同步资源,但是只要有一个线程以写的方式访问同步资源,其它线程就必须等待直到写操作结束。

         QReadWrite类主要有以下函数

关注
打赏
1652240117
查看更多评论
立即登录/注册

微信扫码登录

0.0371s