基于QReadWriteLock的线程同步
在使用互斥量时会有一个问题,每次只能有一个线程获得互斥量的权限。如果在一个程序中有多个程序需要读取该变量,那么就会出现排队等待现象,降低了程序的性能。 例如在做数据采集时,会涉及到采集,显示,保存,如果数据量很大,此时我们用3个线程来处理,采集线程,数据显示线程,数据保存线程。
例如下面的伪代码
int buf;
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类主要有以下函数
文档来源:51CTO技术博客https://blog.51cto.com/u_12570763/3012399
页:
[1]