首页 > 解决方案 > 如何实现多生产者多消费者单缓冲区模型?

问题描述

有一个缓冲区,多个生产者和多个消费者。任何生产者(只有一个)可以在缓冲区为空时写入缓冲区。任何消费者(只有一个)可以在缓冲区满时读取缓冲区。如何实现这样的模型?我尝试使用 pthread_cond_wait 和 pthread_cond_signal。但我没有找到解决办法。

标签: lockingproducer-consumer

解决方案


我想出了一个解决方案:

bool buffer_empty = true;

// consumer thread:
pthread_mutex_lock(&buffer_lock);
while (buffer_empty) {
    pthread_cond_wait(&buffer_full, &buffer_lock);
}
// consume
buffer_empty = true;
pthread_mutex_unlock(&buffer_lock);


// producer thread:
pthread_mutex_lock(&buffer_lock);
while (!buffer_empty) {
    pthread_cond_wait(&buffer_full, &buffer_lock);
}
// produce
buffer_empty = false;
pthread_mutex_unlock(&buffer_lock);
pthread_cond_signal(&buffer_full);

推荐阅读