QWaitCondition 条件变量

在之前的文章中,我们已经讲过了很多种线程同步的方法,如互斥锁,信号量,读写锁等,今天我们再来学习一种线程同步的方法,条件变量。

条件变量允许一个线程通知其他的线程它们所等待的某个条件已经满足了,可以继续运行了。一个或多个线程可以在同一个条件变量上等待。当条件满足时,我们可以调用wakeOne()从所有等待在该条件变量上的线程中随机的唤醒一个线程继续运行,也可以使用wakeAll()方法同时唤醒所有等待在该条件变量上的线程。

另外,QWaitCondition和QSemaphore一样,要和QMutex配合使用,因为要访问到共享资源。

下面,我们使用常见的生产者-消费者问题来演示一下条件变量的使用。

新建一个Qt控制台程序,再新建两个线程类Producer和Consumer,继承自QThread类。

我们先在main.cpp中,声明我们要用到的全局变量。代码如下:

#include <QCoreApplication>
#include <QWaitCondition>
#include <QMutex>
#include <QQueue>

QQueue<int> buffer;
QMutex mutex;
QWaitCondition fullCond;
QWaitCondition emptyCond;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    return a.exec();
}
其中,buffer就是我们的缓冲区,mutex是保护缓存区的互斥锁,条件变量ful
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值