如何用C语言实现支持长尾词的生产者-消费者队列?

2026-04-12 06:401阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计705个文字,预计阅读时间需要3分钟。

如何用C语言实现支持长尾词的生产者-消费者队列?

原文:本代码都是ChatGPT生成,我只是做了微小的调整和整合,AI提示词如下:设计一个C++类,支持生产者-消费者模型,可以通过size函数获取剩余数量,可能第一次生成的不一定合适,多刷

简化版:代码由ChatGPT生成,我略作调整。AI提示:设计C++类,实现生产者-消费者模型,含size函数查余量,初次生成可能不理想,多试几次。

本文的代码都是ChatGPT生成,我只是做了微小的调整和整合,AI提示词如下:

如何用C语言实现支持长尾词的生产者-消费者队列?

设计一个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); while (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); return 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_notFull; }; #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保证线程安全,获取当前容量并返回。

测试示例代码如下:

#include <iostream> #include "ProducerConsumerQueue.h" int main() { ProducerConsumerQueue<int> queue(2); // 生产者线程 std::thread producer([&queue] { for (int i = 0; i < 10; ++i) { queue.push(i); } }); // 消费者线程 std::thread consumer([&queue] { for (int i = 0; i < 10; ++i) { int value = queue.pop(); std::cout << "Consumed " << value << std::endl; std::cout << queue.size() << std::endl; } }); producer.join(); consumer.join(); }

到此这篇关于C++实现简单的生产者-消费者队列详解的文章就介绍到这了,更多相关C++生产者消费者队列内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

本文共计705个文字,预计阅读时间需要3分钟。

如何用C语言实现支持长尾词的生产者-消费者队列?

原文:本代码都是ChatGPT生成,我只是做了微小的调整和整合,AI提示词如下:设计一个C++类,支持生产者-消费者模型,可以通过size函数获取剩余数量,可能第一次生成的不一定合适,多刷

简化版:代码由ChatGPT生成,我略作调整。AI提示:设计C++类,实现生产者-消费者模型,含size函数查余量,初次生成可能不理想,多试几次。

本文的代码都是ChatGPT生成,我只是做了微小的调整和整合,AI提示词如下:

如何用C语言实现支持长尾词的生产者-消费者队列?

设计一个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); while (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); return 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_notFull; }; #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保证线程安全,获取当前容量并返回。

测试示例代码如下:

#include <iostream> #include "ProducerConsumerQueue.h" int main() { ProducerConsumerQueue<int> queue(2); // 生产者线程 std::thread producer([&queue] { for (int i = 0; i < 10; ++i) { queue.push(i); } }); // 消费者线程 std::thread consumer([&queue] { for (int i = 0; i < 10; ++i) { int value = queue.pop(); std::cout << "Consumed " << value << std::endl; std::cout << queue.size() << std::endl; } }); producer.join(); consumer.join(); }

到此这篇关于C++实现简单的生产者-消费者队列详解的文章就介绍到这了,更多相关C++生产者消费者队列内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!