Скачиваний:
23
Добавлен:
01.05.2014
Размер:
640.51 Кб
Скачать

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 байт, в приложении приведена разработанная документация (спецификация, руководство оператора и текст программы)