Series of university laboratory work
#1
- Программа порождает некоторое число потоков, каждый из которых бездействует определенное время, а затем выводит некоторое сообщение , после чего завершает работу. Число потоков предавать программе в виде аргумента командной строки при запуске.
- Программа порождает поток-демон, который с определенной периодичностью записывает в специальный файл текущее время. Основная программа ждет некоторое время а затем завершает работу. Как отображается демон в списке процессов? Что с ним случается после завершения программы.
- Программа порождает определенное число потоков, которые работают с общим ресурсом. В качестве общего ресурса использовать двухстороннюю очередь, защитив её мьютексом, обернув их в класс. Потоки должны как записывать данные в очередь, так и извлекать их из нее.
#2
- Реализовать по крайней мере два алгоритма генерации псевдослучайных равномерно-распределенных чисел (при этом один из них обязательно должен использовать побитовые операции).
- В качестве инициализирующих значений для генератора использовать биты из псевдоустройства Unix /dev/random.
- Протестировать генераторы с помощью графического теста, нарисовав гистограмму для разного количества сгенерированных чисел.
- Протестировать генераторы вычислив для разного количества сгенериорванных чисел эмпирическое математическое ожидание и эмпирическую дисперсию. Сравнить их с теоретическими значениями для равномерного распределения.
#3
- Написать параллельный генератор псевдослучайных чисел, распределив работу между параллельными процессами. Воспользоваться одним из генераторов, который вы реализовали при выполнении лабораторной работы №2.
- Для проверки работы генератора сгенерировать вначале небольшое количество псевдослучайных чисел и убедиться, что среди них нет периодических повторов.
- Учесть, что для каждого потока необходимо отдельно задать начальное значение генератора иначе они могут сгенерировать одинаковую последовательность чисел.
#4
- На основе генераторов из предыдущей лабораторной, реализовать генерацию распределений, отличных от равномерного: нормальное распределение, распределение 3. Пуассона, распределение Вейбула и экспоненциальное распределение.
- Распределить работу между несколькими нитями.
- Протестировать программу, нарисовав гистограмму распределений, а также вычислив эмпирическое математическое ожидание и эмпирическую дисперсию, сравнив их с теоретическими значениями для соответствующих распределений.
#5 Реализовать используя потоки и шаблон производитель-потребитель (producer-consumer). Схема работы программы следующая.
- При запуске программы создаются минимум два потока.
- Один из потоков (producer) производит некоторую информацию (например, генерирует случайные числа) и отправляет их в некоторый буфер (например, очередь).
- Буфер имеет конечную длину и при полном заполнении producer или прекращает посылать данные или данные попросту теряются.
- Второй из процессов (consumer) обращается к буферу, извлекает имеющуюся там информацию и использует ее в своей работе. Если буфер пустой, то он ждет появление информации, проверяя буфер с некоторой периодичностью.
- Буфер должен обеспечивать корректную работу с множеством потоков и не допускать гонки данных.