Implement multiple producers and consumers
The producer-consumer problem is really a set of problems. Solutions will differ if the buffer is bounded or unbounded, or if there are multiple producers, multiple consumers, or both.
Let's consider a case with multiple producers, multiple consumers, and a bounded (limited capacity) buffer. This is a common condition.
How to do it…
In this recipe, we'll look at a case with multiple producers and consumers and a bounded buffer, using a variety of techniques we've covered in this chapter:
- We'll start with some constants for convenience and reliability:
constexpr auto delay_time{ 50ms }; constexpr auto consumer_wait{ 100ms }; constexpr size_t queue_limit{ 5 }; constexpr size_t num_items{ 15 }; constexpr size_t num_producers{ 3 }; constexpr size_t num_consumers{ 5 };
delay_time
is aduration
object, used withsleep_for()
.consumer_wait
is aduration
object, used with theconsumer
condition variable.queue_limt...