1 Техническое задание
1.1 Назначение разработки
Данное приложение демонстрирует принципы взаимодействия и механизмы синхронизации процессов в операционной системе UNIX.
1.2 Описание разработки
В данной курсовой работе приведена программа на языке С. При помощи этого языка написана программа, управляющая взаимодействием параллельных вычислительных задач, а также сами задачи.
1.3 Исходный данные:
OSGNU/Linux
Компилятор С (gcc)
1.4 Технические требования
Для работы приложения необходимо следующее:
- 64 МВ ОП
- Наличие ОС Unix(Linux)
- Процессор класса Pentiumс частотой не менее 200 МГц
1.5 Специальные технические требования
Компьютер с установленной на нем ОС Unix (Linux) – для отладки программы, написанной на языке С.
Компилятор С – для компиляции программы на языке С (gcc,gc).
2 Разработка структуры программы
В соответствии с техническим заданием программа должна реализовывать следующие функции:
Расчет факториала
Расчет бесконечно убывающей геометрической прогрессии
Расчет суммы числового ряда
На рисунке 1 представлена структура разрабатываемой программы, включающая в себя функцию main главного процесса, порождающую другие процессы.
Рисунок 1 Структурная схема программы
3 Разработка Алгоритмов основных функций
3.1 Главная функция (main)
Главная функция (main) – функция, с которой начинается выполнение программы.
Эта функция осуществляет создание потоков A,Bи Е, производит проверку завершения каждого из созданных потоков. Производит корректное удаление семафоров. Алгоритм главной функции представлен на рисунке 2.
Рисунок 2 Алгоритм главной функции
3.2 Функция thread_func_A
Функция thread_func_Aпредназначена для выполнения подсчета функции факториала числа 32 и вывода полученного значения на экран. Также этой функцией производится запуск потока С.
Алгоритм функции представлен на рисунке 3
Рисунок 2 Алгоритм функции thread_func_A
3.3 Функция thread_func_В
Функция thread_func_В выполняет подсчет числового ряда типа -1, +2, -3, +4… и вывода полученного значения на экран. Также этой функцией производится запуск потокаD. Алгоритм функции представлен на рисунке 3.
Рисунок 3: Алгоритм функции thread_func_В
3.4 Функция thread_func_C
Функция thread_func_Cвыполняет подсчет первых 30 членов геометрической прогрессии 1, ½, ¼….Алгоритм функции представлен на рисунке 4.
Рисунок 4 Алгоритм функции thread_func_C
3.5 Функция thread_func_D
Функция thread_func_Dвыполняет подсчет первых 1.000.000 членов прогрессии 1, ½, 1/3, ¼ … Алгоритм функции представлен на рисунке 5.
Рисунок 5 Алгоритм функции thread_func_D
3.6 Функция thread_func_E
Функция thread_func_Dвыполняет подсчет первых 1.000.000 членов прогрессии ½, 1/6, 1/8, 1/10 … Алгоритм функции представлен на рисунке6.
Рисунок 6 Алгоритм функции thread_func_E
4. Разработка программы
Разработанные алгоритмы функций были реализованы на языке С.
При разработке данной программы были использованы стандартные функции:
pthread_create– функция создание потока
pthread_join– функция проверки завершения потока
printf – функция вывода сообщения на экран
perror– функция вывода сообщения в стандартный поток ошибок
sem_init– функция инициализации семафора
sem_post– функция увеличивает значение семафора на 1
sem_wait– функция останавливает вызвавший ее поток, до тех пор, пока значение семафора не станет больше нуля
sem_destroy– функция для удаления семафора
При разработке программы были использованы переменные, приведенные в таблице 1
Таблица 1 – Переменные, использованные в программе
Имя |
Тип |
Назначение |
sem,sem_B, sem_C,sem_C2 |
sem_t |
Переменные-семафоры, служащие для синхронизации потоков |
result |
int |
Переменная для проверки создания потока |
thread_A, |
pthread_t |
Переменная-идентификатор потока А |
thread_B, |
pthread_t |
Переменная-идентификатор потока B |
thread_C, |
pthread_t |
Переменная-идентификатор потока C |
thread_D, |
pthread_t |
Переменная-идентификатор потока D |
thread_E; |
pthread_t |
Переменная-идентификатор потока E |
sum |
float |
Переменная для подсчета суммы в функциях |
i |
float |
Переменная для подсчета итераций цикла |
ЗАКЛЮЧЕНИЕ
В курсовой работе были изучены методы создания многопоточных приложений с использованием языка CдляOSGNU/Linux.
Построены алгоритмы и структура программы многопоточного приложения. Полученная программа синхронизирует выполнение вычислительных процессов. Данная программа реализована на языке С, исполняемый файл занимает 13849 байт, в приложении приведена разработанная документация (спецификация, руководство оператора и текст программы)