Лабораторная 3.
Параллельная сортировка, пул потоков.

Информация

Пулом потоков называется набор заранее подготовленных потоков, запущенных и находящихся в заблокированном состоянии (заморозке) в ожидании некоторого события. При возникновении события, ассоциированного с потоком из пула, последний переходит в активное сотояние (размораживается) и производит обработку подготовленных для него данных, после чего снова блокируется. Таким образом, изменяя набор исходных данных для потока и генерируя необходимое для его запуска событие, можно добиться параллельной обработки нескольких наборов данных без повторных порождений и ожиданий завершения потоков. С учетом совокупности потоков в пуле, такой подход позволяет эффективно распараллеливать алгоритмы, требующие для своей реализации фиксированного количества потоков.

Инициализация пула потоков реализуется обычно в начале программы или блока кода, эксклюзивно использующего данный пул. Завершение работы с потоками пула и уничтожение пула - в конце программы или соответствующего блока кода.

Для пула потоков должны быть предусмотрены механизмы: 1) инициализации и завершения работы с пулом; 2) безопасного доступа к замороженному потоку в целях подготовки его к неблокирующему запуску; 3) неблокирующий запуск ранее полученного и подготовленного потока;

Для каждого потока пула должны быть предусмотрены механизмы: 1) определения состояния потока (состояние работы или состояние заморозки); 2) формирования данных для потока; 3) неблокирующего запуска потока (возможно совмещение пунктов 2 и 3)

Указанный набор механизмов является необходимым и достаточным для пула, потоки которого не предусматривают постобработку результатов.

Разработанная на лекционном занятии параллельная сортировка требует для своей работы фиксированного максимального числа потоков и не требует постобработки результатов сортировки, следовательно может быть реализована с использованием пула потоков, принципы функционирования которого рассмотрены выше.

Задание

  1. Разработать механизм управления пулом потоков в виде класса (классов).
  2. Модифицировать параллельную сортировку, обеспечив использование потоков из пула, вместо порождения новых потоков.