只有一个生产者一个消费者的代码
时间: 2024-05-06 07:15:15 浏览: 5
这是一个使用互斥锁和条件变量实现的C++生产者消费者模型的简单示例:
```
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <queue>
std::mutex mtx; // 互斥锁,用于保护共享资源
std::condition_variable cv; // 条件变量,用于等待和通知
std::queue<int> q; // 共享队列
void producer() {
for (int i = 0; i < 10; ++i) {
std::unique_lock<std::mutex> ul(mtx); // 获得互斥锁
q.push(i); // 生产者向队列中添加数据
std::cout << "Produced: " << i << std::endl; // 打印生产者信息
cv.notify_one(); // 通知等待的消费者
ul.unlock(); // 释放互斥锁
std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 模拟生产过程
}
}
void consumer() {
for (int i = 0; i < 10; ++i) {
std::unique_lock<std::mutex> ul(mtx); // 获得互斥锁
cv.wait(ul, []{ return !q.empty(); }); // 等待条件变量,直到队列不为空
int value = q.front(); // 消费者从队列中取出数据
q.pop();
std::cout << "Consumed: " << value << std::endl; // 打印消费者信息
ul.unlock(); // 释放互斥锁
std::this_thread::sleep_for(std::chrono::milliseconds(200)); // 模拟消费过程
}
}
int main() {
std::thread t1(producer);
std::thread t2(consumer);
t1.join();
t2.join();
return 0;
}
```
上面的程序中,生产者向队列中添加数据,消费者从队列中取出数据,两者通过互斥锁保护共享资源。当队列为空时,消费者线程等待条件变量,直到生产者向队列中添加数据并通知消费者线程继续执行。在这个简单的示例中,生产者和消费者的生产和消费速度是固定的,实际应用中可以根据需要进行调整。