生产者与消费者问题c++
时间: 2024-12-28 15:33:29 浏览: 11
生产者与消费者问题是经典的设计模式之一,它描述了一个场景,其中有两个线程角色:生产者(Producer)负责生成数据并放入共享的数据结构中,而消费者(Consumer)负责从这个结构中取出数据进行处理。这种模式通常通过互斥量(mutex)、条件变量(condition variable)等同步原语在C++中实现,以保证并发操作的安全。
以下是简单的C++实现生产者和消费者问题的一个例子:
```cpp
#include <queue>
#include <thread>
#include <mutex>
#include <condition_variable>
std::queue<int> data_queue;
std::mutex queue_mutex;
std::condition_variable condition;
bool is_full = false; // 数据队列满标志
bool is_empty = true; // 数据队列空标志
void producer(int count) {
for (int i = 0; i < count; ++i) {
std::lock_guard<std::mutex> lock(queue_mutex);
if (is_full) {
condition.wait(lock, [] { return !is_full; });
}
data_queue.push(i);
is_empty = false;
std::cout << "Produced item: " << i << "\n";
std::notify_one(condition); // 醒通知消费者
}
}
void consumer() {
while (true) {
std::unique_lock<std::mutex> lock(queue_mutex);
if (is_empty) {
condition.wait(lock, [] { return !is_empty; });
}
int value;
data_queue.pop();
is_full = !data_queue.empty();
std::cout << "Consumed item: " << value << "\n";
}
}
int main() {
std::thread producer_thread(producer, 10);
std::thread consumer_thread(consumer);
producer_thread.join();
consumer_thread.join();
return 0;
}
```
在这个例子中,`producer`线程产生数据,当队列已满时会等待;`consumer`线程消费数据,当队列为空时才会等待。`condition_variable`用于线程间的通信,确保了生产者和消费者的同步。
阅读全文