Тестовая Задача На Многопоточность

  • Автор темы serste
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

serste

Гость
#1
Здравствуйте!

Я новичок в многопоточном программировании, необходимо было выполнить тестовое задание:

Используя С++, Win32 API и STL корректно реализовать следующую задачу:
Откуда-то дано:
class Request
{
};
// возвращает NULL если нужно завершить процесс, либо указатель на память,
// которую в дальнейшем требуется удалить
Request* GetRequest() throw();
// обрабатывает запрос, но память не удаляет
void ProcessRequest(Request* request) throw();
const int NumberOfThreads = 2;

Основной поток должен:
1) Запустить несколько рабочих потоков (NumberOfThreads).
2) Класть в одну очередь заданий задачи до тех пор, пока GetRequest() не вернёт NULL.
3) Корректно остановить рабочие потоки. Они должны доделать текущий ProcessRequest, если он имеется, и остановиться. Если имеются необработанные задания, не обращать на них внимания.
4) Завершить программу.
Рабочий поток должен:
1) Обрабатывать поступающие через очередь запросы с помощью ProcessRequest.
2) Завершиться, как только основной поток ему это скомандует.
Вызовы GetRequest() и ProcessRequest() могут работать долго.

В ответ на это задание я написал код, содержащийся в приложении.

Мне было сказано, что этот код имеет два недостатка (в данном случае это эквивалентно тому, что данный код - один сплошной недостаток :) ):
1) плохое знание WinAPI: объекты синхронизации
2) код написан с использованием опасных конструкций в плане обработки исключений

Если возможно, хотелось бы, чтобы кто-нибудь рассказал мне, что именно в данном коде не правильно
 

Вложения

  • 8.9 КБ Просмотры: 18
Статус
Закрыто для дальнейших ответов.