首页 > 编程知识 正文

qt线程同步又不阻塞线程(qt多进程与多线程)

时间:2023-05-06 20:48:08 阅读:75678 作者:2526

1 .如果1.QReadWriteLock使用独占量,则一次只能有一个线程获取独占量权限。 如果要读取一个程序中有多个线程的变量,则在使用互斥量时也必须排队。 独占量会降低程序的性能,因为实际上只需要读取一个变量就可以同时访问多个线程。

lockForRead (:以只读方式锁定资源。 如果其他线程用写锁定,此函数将被阻止。 lockForWrite () :以写方式锁定资源。 如果此线程或其他线程在读取或写入模式下锁定资源,此函数将被阻止。 unlock (:解锁。 trylockforread(:lockforread ) )的无阻塞版本。 trylockforwrite(:lockforwrite ) )的无阻塞版本。 2 .示例假设有数据收集程序。

线程1负责向缓冲器收集数据,线程2读取缓冲器的数据,线程3负责读取缓冲器的数据并保存在文件int buffer[100]中; qreadwritelock锁定; voidthreadwritetobuffer :3360 run ({ . lock.lockforwrite ); 写入到缓冲区(; 将数据写入buffer lock.unlock (; }void threadShow:run () . lock.lockforread ); showBuffer (; 读取buffer数据,显示lock.unlock (; voidthreadsavefile:run () . lock.lockforread ); 保存文件(; 读取buffer数据并保存到文件lock.unlock (); } QReadLocker和QWriteLocker是QReadWriteLock的简便形式,如同QMutexLocker是QMutex的简便版本一样,无需与unlock配对使用,以上代码可以改成这样。

int buffer[100]; qreadwritelock锁定; voidthreadwritetobuffer :3360 run ()…qwritelockerlocker(lock ); 写入到缓冲区(; //数据写入buffer . } voidthreadshow :3360 run ()…qreadlockerlocker(lock ); showBuffer (; 读取并显示buffer数据. } voidthreadsavefile :3360 run () . …qreadlockerlocker ) lock ); 保存文件(; 读取buffer数据并保存到文件. }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。