...

/

Implement Multiple Producers and Consumers

Implement Multiple Producers and Consumers

Learn to implement multiple producer and consumer problems.

We'll cover the following...

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 a duration object, used with sleep_for().

consumer_wait is a duration object, used with the consumer condition variable.

queue_limt is the buffer limit—the maximum number of items in the deque.

num_items is the maximum number of items produced per producer.

...