C++实现一个简单的生产者-消费者队列建站知识
导读:建站知识建站知识本文的代码都是ChatGPT生成,我只是做了微小的调整和整合,AI提示词如下: 设计一个C++类,支持生产者-消费者模型,可以通过size函数获取剩余数量 可能seo网站优化个业网站建设公司。
本文的代码都是ChatGPT生成,我只是做了微小的调整和整合,AI提示词如下: 设计一个C++类,支持生产者-消费者模型,可以通过size函数获取剩余数量 可能第一次生成的不一定合适,多刷新几次。 生成的 ProducerConsumerQueue.h 代码如下: #ifndef PRODUCER_CONSUMER_QUEUE_H#define PRODUCER_CONSUMER_QUEUE_H#include queue#include mutex#include condition_variablet […]
本文的代码都是ChatGPT生成,我只是做了微小的调整和整合,AI提示词如下:
设计一个C++类,支持生产者-消费者模型,可以通过size函数获取剩余数量可能第一次生成的不一定合适,多刷新几次。 生成的ProducerConsumerQueue.h代码如下:
#ifndef PRODUCER_CONSUMER_QUEUE_H #define PRODUCER_CONSUMER_QUEUE_H #include <queue> #include <mutex> #include <condition_variable> template<typename T> class ProducerConsumerQueue { public: ProducerConsumerQueue(int size) : m_maxSize(size), m_curSize(0) {} void push(T& val) { std::unique_lock<std::mutex> lock(m_mutex); wh网站seo优化诊断工具ile (m_curSize >= m_maxSize) { m_notFull.wait(lock); } m_queue.push(val); ++m_curSize; m_notEmpty.notify_one(); } T pop() { std::unique_lock<std::mutex> lock(m_mutex); while (m_curSize <= 0) { m_notEmpty.wait(lock); } T val = m_queue.front(); m_queue.pop(); --m_curSize; m_notFull.notify_one(); return val; } int size() { std::unique_lock<std::mutex> lock(m_mutex); r公司网站建设eturn m_curSize; } private: std::queue<T> m_queue; int m_maxSize; int m_curSize; std::mutex m_mutex; std::condition_variable m_notEmpty; std::condition_variable m_notFu网站建设制作ll; }; #endif //PRODUCER_CONSUMER_QUEUE_H在上面的代码中,我们定义了一个ProducerConsumerQueue类:
- ProducerConsumerQueue类有最大容量和当前容量两个属性,使用std::queue<int>存储数据,使用std::mutex保证线程安全,使用std::condition_variable实现线程同步。
- 在push函数中,如果当前容量已满,等待消费者消费;否则插入数据,当前容量加1,通知消费者。
- 在pop函数中,如果当前容量为0,等待生产者生产;否则取出数据,当前容量减1,通知生产者。
- 在size函数中,使用std::unique_lockstd::mutex保证线程安全,获取当前容量并返回。
测试示例代码如下:
声明: 本文由我的SEOUC技术文章主页发布于:2023-05-25 ,文章C++实现一个简单的生产者-消费者队列建站知识主要讲述生产者,队列,C++实现一个简单的生产者-消费者队网站建设源码以及服务器配置搭建相关技术文章。转载请保留链接: https://www.seouc.com/article/web_7716.html