21xrx.com
2025-03-24 20:31:46 Monday
文章检索 我的文章 写文章
C++生产者消费者代码
2023-07-05 06:28:03 深夜i     --     --
C++ 生产者 消费者 代码

生产者消费者问题是计算机科学中常见的一个问题,涉及资源的协调与共同利用。C++是一种广泛使用的编程语言,也可以用于解决生产者消费者问题。下面是一个基本的C++生产者消费者代码示例:

#include <iostream>
#include <queue>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;
queue<int> numQueue; // 存储数字的队列
mutex queueMutex; // 互斥锁,保证线程安全
condition_variable cv; // 条件变量,控制线程之间的通信
void producer(int num) {
  for (int i = 0; i < num; i++) {
    unique_lock<mutex> lock(queueMutex);
    numQueue.push(i + 1);
    cv.notify_one(); // 唤醒一个消费者线程
    lock.unlock();
  }
}
void consumer() {
  while (true) {
    unique_lock<mutex> lock(queueMutex);
    cv.wait(lock, [] {return !numQueue.empty(); }); // 等待并判断队列是否非空
    int num = numQueue.front();
    numQueue.pop();
    cout << "消费者消费了数字:" << num << endl;
    lock.unlock();
  }
}
int main() {
  thread t1(producer, 10); // 生产者线程
  thread t2(consumer); // 消费者线程
  t1.join();
  t2.join();
  return 0;
}

以上代码实现了一个简单的C++生产者消费者模型:生产者生成数字并存入队列中,消费者从队列中取出数字进行消费。其中,互斥锁保证了同时只有一个线程可以访问队列,条件变量控制了线程之间的通信,wait()让线程等待,直到满足条件才继续执行。整个过程中,生产者和消费者的执行是异步的,通过线程的方式同时进行。

总之,C++提供了一系列的工具类和库来实现多线程编程,开发者可以根据实际需求灵活运用。在使用多线程编程时,需要注意线程安全和同步控制,避免出现数据竞争和难以调试的问题。

  
  

评论区