Задание: Задача о наследстве. У старого дона Энрике было два сына, у каждого из сыновей – еще по два сына, каждый из которых имел еще по два сына. Умирая, дон Энрике завещал все свое богатство правнукам в разных долях. Адвокат дон Хосе выполнил задачу дележа наследства в меру своих способностей. Правнуки заподозрили адвоката в укрывательстве части наследства. Требуется создать многопоточное приложение, которое при известных сумме завещания дона Энрике и доле каждого наследника, проверяет честность адвоката. При решении использовать принцип дихотомии. Примечание. Необходимо учесть изощренный ум адвоката, который может не только присваивать себе часть суммы, но и выполнять другие манипуля- ции с суммой наследства.
- сумма наследства: целое число
- доли наследников: double, например 0.1 это 10% от наследства
Разработать консольное приложение, в котором единый родительский процесс запускает требуемое число дочерних процессов. Множество процессов взаимодействуют с использованием семафоров в стандарте UNIX SYSTEM V. Обмен данными ведется через разделяемую память в стандарте UNIX SYSTEM V.
Чтобы скомпилировать:
gcc 4.c
Чтобы запустить:
./a.out 100 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3
В дополнение к программе на предыдущую оценку необходимо разработать программу, в которой для взаимодействия процессов используется один из двух вариантов, описанных выше, но не реализованных на предшествующую оценку.
Множество процессов взаимодействуют с использованием неименованных POSIX семафоров расположенных в разделяемой памяти. Обмен данными также ведется через разделяемую память в стандарте POSIX.
Чтобы скомпилировать:
gcc 5.c -lpthread -lrt
Чтобы запустить:
./a.out 100 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3
В дополнение к программам на предыдущие оценки необходимо разработать программу, в которой для взаимодействия процес- сов используется оставшийся вариант, из описанных выше, но не реализованный на предшествующие оценки. Множество процессов взаимодействуют с использованием име- нованных POSIX семафоров. Обмен данными ведется через разделяемую память в стандарте POSIX.
Чтобы скомпилировать:
gcc 6.c -lpthread -lrt
Чтобы запустить:
./a.out 100 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.3
В дополнение к программам на предыдущие оценки необходимо разработать приложение, состоящую из отдельных программ–процессов, запускаемых независимо друг от друга. С использованием семафоров и разделяемой памяти организовать между ними взаимодействие. Множество независимых процессов взаимодействуют с исполь- зованием семафоров в стандарте UNIX SYSTEM V. Обмен данными ведется через разделяемую память в стандарте UNIX SYSTEM V.
Чтобы скомпилировать:
- В терминале №1
gcc 7-1.c -lpthread -lrt -o 7-1
- В терминале №2
gcc 7-2.c -lpthread -lrt -o 7-2
Чтобы запустить:
- В терминале №1
./7-1 100
- В терминале №2
./7-2 100 0.1 0
, где 100 - сумма наследства, 0.1 доля наследника, 0 индекс наследника. Необходимо последовательно 8 раз ввести данную команду, изменяя долю и индекс наследника
В дополнение к программам на предыдущие оценки необходимо разработать программу, в которой для взаимодействия процессов используется оставшийся вариант, из описанных на 7 баллов. Множество независимых процессов взаимодействуют с использованием именованных POSIX семафоров. Обмен данными ведется через разделяемую память в стандарте POSIX.
Чтобы скомпилировать:
- В терминале №1
gcc 8-1.c -lpthread -lrt -o 8-1
- В терминале №2
gcc 8-2.c -lpthread -lrt -o 8-2
Чтобы запустить:
- В терминале №1
./8-1 100
- В терминале №2
./8-2 100 0.1 0
, где 100 - сумма наследства, 0.1 доля наследника, 0 индекс наследника. Необходимо последовательно 8 раз ввести данную команду, изменяя долю и индекс наследника