locking - 如何实现多生产者多消费者单缓冲区模型?
问题描述
有一个缓冲区,多个生产者和多个消费者。任何生产者(只有一个)可以在缓冲区为空时写入缓冲区。任何消费者(只有一个)可以在缓冲区满时读取缓冲区。如何实现这样的模型?我尝试使用 pthread_cond_wait 和 pthread_cond_signal。但我没有找到解决办法。
解决方案
我想出了一个解决方案:
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);
推荐阅读
- php - 为什么我的 PHP 登录代码不起作用?
- javascript - 在上下文 api 中,我在控制台中获得价值,但在 li 中没有
- php - PHP upload image through AJAX issue
- javascript - How to subtract month from YYYYMMDD hh mm date format in Angular?
- python - 简单的 Python 交易系统示例:填充 pandas 数据框并导出到 excel
- objective-c - With ARC , why the dealloc not called
- python - TENSORFLOW Can't find a solution for: ValueError: logits and labels must have the same shape ((None, 1) vs (None, 2, 2))
- amazon-s3 - Facing "IllegalLocationConstraintException" error
- python - trying to merge two list ,placing their item alternative to each other in pyhton
- javascript - React 钩子形式 setValue 返回未定义的多选(react-select)