SoftCraft
разноликое программирование

Top.Mail.Ru

Многопоточное программирование.
Взаимодействие потоков. Микропроект.
Требования к оформлению. 2020-2021 уч.г.


Начальная страница курса

Необходимо разработать и отладить многопоточную программу с использованием семафоров и (или) условных переменных в соответвии с выданным заданием. Результаты работы оформляются в виде пояснительной записки. Оформление должно включать титульный лист в котором должны отразиться: ВУЗ, департамент, название разработки, данные о студенте (ФИО, номер группы/подгруппы). Меня интересует не столько формальная сторона оформления титульного листа, сколько корректность и полнота представленной информации.

Последний срок сдачи работы 13.12.2020 г. (воскресенье 23:59:59). Сдача после этого срока уменьшает оценку на 1 балл с каждым днем задержки.

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

Список используемых источников должен содержать информацию, используемую при выполнении работы, а не просто формальную отписку. Если таких источников информации нет, то следует написат, что работа реализована впервые в мировой практике.

Исходные тексты программы в ПЗ включать не нужно. Они должны быть выложены отдельно. Учитывая небольшой размер кода достаточно сформировать весь исходный текст в одном файле. При реализации проекта предлагается использовать библиотеку Posix thread (pthread) или стандартную библиотку потоков (thread) языка программирования C++. Лучше не использовать Windows API, так как в этом случае может сильно замедлиться процесс проверки задания из-за отсутствия под рукой соответствующей операционной системы.

Разработанная программа должна запускаться из командной строки. Необходимые исходные данные могут быть аргументами командной строки или задаваться в диалоге после запуска. При наличии аргументов командной строки необходимо описать формат команды в ПЗ, а в программе, в случе некорректного ввода этих аргументов, предусмотреть вывод сообщения, описывающего требуемый формат.

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

Обратите внимание на юзабилити. При работе программа должна выводит информацию в виде протокола происходящих событий, однозначно определяя номер выполняемого потока и происходящее событие. При этом следует таким образом сформулировать и идентифицировать выводимые программой действи, чтобы они были в терминах предметной области. То есть, не выводить, например, «поток 1 обратился к элементу массива A[5]». Вместо этого, в соответствии со сценарием, определяемым задачей сформулировать работу потока в терминах предметной области. Например: «Время 20: Пират 1 приступил к обследованию квадрата № 5». В многопоточном программировании для лучшего понимания протокола работы предпочтительнее выводит информацию о событиях, а не самом процессе. То есть точках, когда процесс начался и когда он завершен («Время 25: Пират 1 не нашел клад в квадрате № 5» - это событие, определяющее конец процесс поиска). Обратите внимание, что задачи посвящены взаимодействию процессов. Поэтому наглядное отображение протокола является важным моментом. Понятно, что время масштабировать не нужно, так как оно отражает реальные моменты запуска событий.

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

Пояснительную записку и программу необходимо выложить на git. Не стоит выкладывать на git упакованные архивы. Данная систем предназначена как раз для того, чтобы работать с исходными текстами. Она позволяет вносить изменения в ходе работы. При скачивании она сама формирует архивы или позволяет полностью синхронизировать проекты. Информацию о готовности программы и ссылку на репозиторий выслать преподавателю после того как убедитесь что все работает и обеспечивает формирование информации о работе программы в удобном виде.

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


Варианты заданий

Варианты заданий находятся в документе по данной ссылке


Начальная страница курса