13 多线程

13 多线程

QThread创建多线程程序

互斥量同步

QReadWriteLock的线程同步

QWaitCondition的线程同步

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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();

基于信号量的线程同步

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

步步为营

发布于

2024-05-08

更新于

2025-03-15

许可协议