Откуда-то дано: class Request {};
// возвращает nullptr если нужно завершить процесс, либо указатель на память, которую в дальнейшем требуется удалить Request* GetRequest();
// обрабатывает запрос, но память не удаляет void ProcessRequest(Request* request);
const int NumberOfThreads = 2;
Основной поток должен:
- Запустить несколько рабочих потоков (NumberOfThreads).
- Класть в одну очередь заданий задачи до тех пор, пока GetRequest() не вернёт nullptr.
- Корректно остановить рабочие потоки. Они должны доделать текущий ProcessRequest, если он имеется, и остановиться. Если имеются необработанные задания, не обращать на них внимания.
- Завершить программу.
Рабочий поток должен:
- Обрабатывать поступающие через очередь запросы с помощью ProcessRequest.
- Завершиться, как только основной поток ему это скомандует.
Вызовы GetRequest() и ProcessRequest() могут работать долго.