c - 生产者/消费者:1 个生产者,多个消费者 - 1 个信号量,1 个互斥体,1 个条件变量
问题描述
我正在用一些特定的标准在 C 中实现生产者/消费者问题:
- 1个生产者,多个消费者
- 只使用一个互斥锁、一个信号量、一个条件变量
- 所有消费者都必须消费(就像广播一样),然后,当生产者生产的所有产品都已被消费者消费时,生产者将生产更多。
我不知道如何根据上述标准仅使用我应该使用的东西来实现它。
这是我仅使用 3 个互斥锁编写的伪代码,我无法按照标准执行此操作。
任何帮助将不胜感激,我不知道如何在这里使用一个互斥锁,将信号量和条件变量放在哪里。
伪代码:
作家:
glock(); //lock from reader write_lock(); //wait till there is no readers //write the data write_unlock(); g_unlock();
读者:
g_lock(); //so reader can't read when writer locked g and writting g_unlock(); read_lock(); reader++; if (reader == 1) write_lock(); ///all consumers have consume //read the data read_lock(); reader--; if (reader == 0) write_unlock(); read_lock();
解决方案
这是使用 1 个互斥锁和两个可以支持多个生产者-消费者的条件变量的解决方案。伪代码在 C++ 中
首先阅读这里的线程安全缓冲队列实现。
然后检查生产者消费者解决方案https://codeistry.wordpress.com/2018/03/09/unordered-producer-consumer/。