parallel-and-distributed-programming

Series of university laboratory work

#1

  1. Программа порождает некоторое число потоков, каждый из которых бездействует определенное время, а затем выводит некоторое сообщение , после чего завершает работу. Число потоков предавать программе в виде аргумента командной строки при запуске.
  2. Программа порождает поток-демон, который с определенной периодичностью записывает в специальный файл текущее время. Основная программа ждет некоторое время а затем завершает работу. Как отображается демон в списке процессов? Что с ним случается после завершения программы.
  3. Программа порождает определенное число потоков, которые работают с общим ресурсом. В качестве общего ресурса использовать двухстороннюю очередь, защитив её мьютексом, обернув их в класс. Потоки должны как записывать данные в очередь, так и извлекать их из нее.

#2

  1. Реализовать по крайней мере два алгоритма генерации псевдослучайных равномерно-распределенных чисел (при этом один из них обязательно должен использовать побитовые операции).
  2. В качестве инициализирующих значений для генератора использовать биты из псевдоустройства Unix /dev/random.
  3. Протестировать генераторы с помощью графического теста, нарисовав гистограмму для разного количества сгенерированных чисел.
  4. Протестировать генераторы вычислив для разного количества сгенериорванных чисел эмпирическое математическое ожидание и эмпирическую дисперсию. Сравнить их с теоретическими значениями для равномерного распределения.

#3

  1. Написать параллельный генератор псевдослучайных чисел, распределив работу между параллельными процессами. Воспользоваться одним из генераторов, который вы реализовали при выполнении лабораторной работы №2.
  2. Для проверки работы генератора сгенерировать вначале небольшое количество псевдослучайных чисел и убедиться, что среди них нет периодических повторов.
  3. Учесть, что для каждого потока необходимо отдельно задать начальное значение генератора иначе они могут сгенерировать одинаковую последовательность чисел.

#4

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

#5 Реализовать используя потоки и шаблон производитель-потребитель (producer-consumer). Схема работы программы следующая.

  1. При запуске программы создаются минимум два потока.
  2. Один из потоков (producer) производит некоторую информацию (например, генерирует случайные числа) и отправляет их в некоторый буфер (например, очередь).
  3. Буфер имеет конечную длину и при полном заполнении producer или прекращает посылать данные или данные попросту теряются.
  4. Второй из процессов (consumer) обращается к буферу, извлекает имеющуюся там информацию и использует ее в своей работе. Если буфер пустой, то он ждет появление информации, проверяя буфер с некоторой периодичностью.
  5. Буфер должен обеспечивать корректную работу с множеством потоков и не допускать гонки данных.