【Linux | C++ 】生产者消费者模型(Linux系统下C++ 代码模拟实现)
#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <queue>
std::queue<int> buffer;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void* producer(void* arg) {
int count = 0;
while (true) {
pthread_mutex_lock(&mutex);
if (buffer.size() == 10) { // 缓冲区满时等待
pthread_cond_wait(&cond, &mutex);
}
buffer.push(count++);
std::cout << "Produced: " << buffer.back() << std::endl;
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&cond); // 通知消费者
sleep(1);
}
return nullptr;
}
void* consumer(void* arg) {
while (true) {
pthread_mutex_lock(&mutex);
if (buffer.empty()) { // 缓冲区空时等待
pthread_cond_wait(&cond, &mutex);
}
int data = buffer.front();
buffer.pop();
std::cout << "Consumed: " << data << std::endl;
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&cond); // 通知生产者
sleep(1);
}
return nullptr;
}
int main() {
pthread_t producer_thread, consumer_thread;
pthread_create(&producer_thread, nullptr, producer, nullptr);
pthread_create(&consumer_thread, nullptr, consumer, nullptr);
pthread_join(producer_thread, nullptr);
pthread_join(consumer_thread, nullptr);
return 0;
}
这段代码使用了POSIX线程库pthread来实现一个简单的生产者消费者模型。其中包含了一个同步的缓冲区,生产者线程负责生产数据并放入缓冲区,消费者线程负责从缓冲区取出数据并消费。使用了pthread_mutex_t
来保护临界区,pthread_cond_t
来实现线程间的同步。这个模型可以被扩展和应用于不同的场景。
评论已关闭