13 多线程

64 阅读1分钟

QThread创建多线程程序

在这里插入图片描述

image-20220126184346406

互斥量同步

image-20220126191852202

image-20220126192105047

QReadWriteLock的线程同步

image-20220126193653243

image-20220126194017869

在这里插入图片描述

QWaitCondition的线程同步

image-20220127101915614

#include    <QMutex>
#include    <QThread>
QMutex  mutex;
QWaitCondition  newdataAvailable;

//生产者
mutex.lock();
diceValue=qrand(); //获取随机数
mutex.unlock();
newdataAvailable.wakeAll();//唤醒所有线程,有新数据了
msleep(500); //线程休眠100ms

//消费者
mutex.lock();
newdataAvailable.wait(&mutex);//会先解锁mutex,使其他线程可以使用mutex
mutex.unlock();

基于信号量的线程同步

image-20220127111228881

image-20220127112242951

#include    <QSemaphore>
QSemaphore emptyBufs(2);//信号量:空的缓冲区个数,初始资源个数为2
int n=emptyBufs.available();
emptyBufs.release(2-n);
emptyBufs.acquire();//获取一个空的缓冲区