工作过程中,可能会使用到生产消费者模式来处理各种应用场景,而生产消费者模式指的是生产者只负责生产数据,而消费者只负责消费数据,例如网络通讯的过程中,采用生产者来接受网络数据,而消费者负责处理网络数据,既各司其职,又提高了网络的通讯速度,因此,本文将通过条件变量来说明如何实现生产者消费者模式。
工具/原料
C++
方法/步骤
1
首先实现生产者,定义生产者的函数,接受到数据放入队列之后,调用notify_one函数来通知消费者处理
2
接着实现消费者函数,调用函数wait等待接受信号,如果接受到信号,那么从队列中取出数据然后处理,这里需要注意的是取出数据之后,可以提前解锁,以便生产者能够尽快处理数据
3
最后别忘了在类的私有属性中定义线程锁、队列以及条件变量
4
完成上面的步骤之后,接下来就看下如何使用。首先通过线程的方式启动生产者,休眠一段时间后,再通过线程的方式启动消费者
5
调试运行的结果如下所示,这个说明先启动生产者再启动消费者,消费者也能够成功处理生产者生产的数据
6
先启动消费者,休眠一段时间,再启动生产者
7
从输出结果信息看,消费者和生产者是交替处理的,并且消费者与生产者的处理是一一对应的
8
最后再总体看下生产消费者模式,这里需要注意的是消费者中调用wait函数,需要添加匿名函数,匿名函数是判断队列是否为空,如果不为空,才继续往下处理数据,如果为空,那么继续wait, 这样做的原因是wait返回有可能不是因为接受到生产者发送的信号
注意事项
1
喜欢经验欢迎点赞投票!
上一篇:品牌忠诚消费者的特征