Добор 09.2018

*Указание:* задачи решаются на языке C при помощи интерфейса Windiows API или POSIX (по выбору).


## I вариант 


1. [20 баллов] Родительский процесс должен считывать по одной строке из консоли (признак завершения — пустая строка) и передавать её дочернему процессу. Дочерний процесс должен выводить строку в текстовый файл. Необходимо организовать обмен между процессами при помощи неименованных каналов.

2. [20 баллов] Задано *n* имён текстовых файлов. Программа должна в *n* потоках считывать целые значения из этих файлов и прибавлять получаемые значения к глобальной переменной, блокируемой мьютексом.

3. [20 баллов] Решить предыдущую задачу для случая *n* = 2 при помощи родительского и дочернего процесса, а также переменной в общей памяти, доступ к которой ограничен семафором.


## II вариант


1. [20 баллов] Родительский процесс должен найти все простые числа, не б*о*льшие заданного значения, и передать их дочернему процессу. Дочерний процесс должен вывести их на консоль. Необходимо организовать обмен между процессами при помощи неименованных каналов.

2. [20 баллов] Задан массив целых чисел. Каждый *k*-й поток (*k* меняется от 0 до *n* - 1, всего *n* потоков) должен считывать элементы массива с номерами *k*, *n* + *k*, *n* + 2 *k* и т. д. (до конца массива) и прибавлять их к локальной переменной, содержащей сумму элементов массива, обрабатываемых текущим потоком. По окончании суммирования данных всеми потоками основной поток должен найти сумму всех локальных сумм потоков и вывести полученное значение на консоль.

3. [20 баллов] Решить предыдущую задачу для случая *n* = 2 при помощи родительского и дочернего процесса, а также переменной в общей памяти, доступ к которой ограничен семафором.