21xrx.com
2024-11-05 19:34:31 Tuesday
登录
文章检索 我的文章 写文章
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++提供了一系列的工具类和库来实现多线程编程,开发者可以根据实际需求灵活运用。在使用多线程编程时,需要注意线程安全和同步控制,避免出现数据竞争和难以调试的问题。

  
  

评论区

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