生产者和消费者模型是一种常见的并发模型,用于解决生产者和消费者之间的生产和消费的同步问题。下面是一个简单的C++实现。

#include <iostream>
#include <queue>
#include <thread>
#include <mutex>
#include <condition_variable>

using namespace std;

queue<int> q;
mutex mtx;
condition_variable cv;

void producer() {
    for (int i = 0; i < 10; i++) {
        unique_lock<mutex> ul(mtx);
        q.push(i);
        cout << "producer: " << i << endl;
        cv.notify_one();
    }
}

void consumer() {
    for (int i = 0; i < 10; i++) {
        unique_lock<mutex> ul(mtx);
        cv.wait(ul, []{return !q.empty();});
        int x = q.front();
        q.pop();
        cout << "consumer: " << x << endl;
    }
}

int main() {
    thread t1(producer);
    thread t2(consumer);
    t1.join();
    t2.join();
    return 0;
}

在这个例子中,我们创建了一个队列q,生产者使用push将数据放入队列中,消费者使用pop从队列中取出数据。我们使用互斥锁mtx来保护队列的访问,使用条件变量cv来同步生产者和消费者的操作。

在生产者中,我们使用unique_lock来获取互斥锁,并使用notify_one通知消费者队列中有新的数据可用。

在消费者中,我们使用unique_lock获取互斥锁,并使用wait等待生产者通知队列中有新的数据可用。我们使用[]中的lambda表达式来检查队列是否非空。如果队列不为空,我们使用front获取队列头部的元素,并使用pop删除队列头部的元素。

写一段c++-生产者和消费者模型代码

原文地址: http://www.cveoy.top/t/topic/mKt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录