评论

收藏

[jQuery] 基于QReadWriteLock的线程同步

开发技术 开发技术 发布于:2021-07-09 09:13 | 阅读数:323 | 评论: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类主要有以下函数

  
关注下面的标签,发现更多相似文章