21xrx.com
2024-12-27 05:22:05 Friday
登录
文章检索 我的文章 写文章
C++生产者消费者代码
2023-07-09 11:28:32 深夜i     --     --
C++ 生产者 消费者 代码

C++生产者消费者代码是一种基于多线程并发处理的程序设计思想,目的是减轻系统负载和提高程序效率。在C++语言中,这种代码是利用线程间的互斥锁、条件变量等同步机制实现的,下面我们来看看具体的实现过程。

首先需要定义两个类:一个生产者类和一个消费者类。然后,在主函数中创建一个生产者线程和一个消费者线程,它们共享一个队列,生产者线程每次向队列中添加一个元素,消费者线程则从队列中取出元素。

生产者类中要实现的方法有:添加元素、获取队列大小、清空队列、判断队列是否为空等。消费者类中要实现的方法有:获取队列大小、取出元素、判断队列是否为空等。

以下是一个简单的C++生产者消费者代码实现示例:


#include <iostream>

#include <queue>

#include <mutex>

#include <condition_variable>

#include <thread>

using namespace std;

mutex mtx; //互斥锁

condtion_variable cv; //条件变量

queue<int> q; //队列

class Producer {

public:

  void produce() {

    for (int i = 0; i < 5; ++i) {

      unique_lock<mutex> lock(mtx);

      q.push(i);

      cout << "Producer produing: " << i << endl;

      lock.unlock();

      cv.notify_all();

    }

  }

  int getQueueSize() {

    return q.size();

  }

  void clearQueue() {

    q = queue<int>();

  }

  bool isQueueEmpty() {

    return q.empty();

  }

};

class Consumer {

public:

  void consume() {

    unique_lock<mutex> lock(mtx);

    while (true) {

      cv.wait(lock, [] { return !q.empty(); });

      int item = q.front();

      q.pop();

      cout << "Consumer consuming: " << item << endl;

      lock.unlock();

    }

  }

  int getQueueSize() {

    return q.size();

  }

  bool isQueueEmpty() {

    return q.empty();

  }

};

int main() {

  Producer p;

  Consumer c;

  thread producerThread(&Producer::produce, &p);

  thread consumerThread(&Consumer::consume, &c);

  producerThread.join();

  consumerThread.join();

  return 0;

}

以上代码中,互斥锁mtx用来保护共享队列的操作,条件变量cv用来控制线程的等待和唤醒,q是一个STL队列,存放整型元素。

生产者类Producer中包含四个方法:实现生产、获取队列大小、清空队列和判断队列是否为空。具体来说,produce方法中使用了unique_lock实现了对队列的加锁和解锁,生产完元素后通过条件变量唤醒消费者线程。getQueueSize、clearQueue、isQueueEmpty方法分别用来获取队列大小、清空队列、判断队列是否为空。

消费者类Consumer中包含两个方法:实现消费、判断队列是否为空。consume方法中使用了条件变量的wait实现了等待,当q队列为空时,线程被阻塞,直到生产者线程向队列中添加了元素之后,通过唤醒等待的条件变量执行具体的消费操作。isQueueEmpty方法用来判断队列是否为空。

最后,在主函数中创建了一个生产者线程和一个消费者线程,分别执行生产和消费的操作。

以上就是一个简单的C++生产者消费者代码实现,它充分利用了多线程并发处理的优势,简洁而高效,对于加强程序的性能和可靠性有很大的帮助。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复