Исследование работы объекта синхронизации "Семафор"

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Программирование
  • 27 27 страниц
  • 9 + 9 источников
  • Добавлена 06.06.2023
1 000 руб.
  • Содержание
  • Часть работы
  • Список литературы
Содержание
Введение………………………………………………………………………….2
1 Глава 1. Теоретические основы рассматриваемой темы……………………4
1.1 Назначение операционной системы………………………………………..4
1.2 Понятие процесса и потока…………………………………………………5
1.3 Свойства процессов и потоков……………………………………………..6
1.4 Создание процессов и потоков……………………………………………..9
2 Глава 2. Описание решения конкретной задачи……………………………11
2.1 Эффективность концепции потоков для параллельных вычислений…..11
2.2 Необходимость синхронизации и гонки………………………………….12
2.3 Требования к алгоритмам синхронизации………………………………..15
2.4 Постановка задачи по синхронизации потоков…………………………..16
2.5 Разработка программы решения задачи…………………………………..16
2.6 Результаты тестирования программы…………………………………….18
Заключение……………………………………………………………………...19
Список используемых источников……………………………………………21
Приложение А (код программы)………………………………………………22
Приложение Б (скриншоты программы)……………………………………...24

Фрагмент для ознакомления

Подобные ситуации, когда два или более потока обрабатывают общие данные, а результат зависит от соотношения скоростей потоков, называются гонками.Рис.4 - Влияние относительных скоростей потоков на результат решения задачи2.3 Требования к алгоритмам синхронизацииОрганизация взаимного исключения критических участков, конечно, позволяет избежать ситуации конкуренции, но этого недостаточно для правильного и эффективного сосуществования совместных процессов. Мы сформулировали пять условий, которые должны быть выполнены для того, чтобы хороший программный алгоритм организовал сосуществование процессов с критическими участками, если они могут проходить их в любом порядке: 1. Проблема должна решаться чисто программно на обычной машине без специальных команд исключения. В этом случае предполагается, что основные инструкции языка программирования являются атомарными операциями. 2. Не должно быть никаких предположений об относительных скоростях выполняющихся процессов или количестве процессоров, на которых они работают. 3. Если процесс Pi выполняется в своей критической части, то нет других процессов, выполняющихся в его критической части. Это условие называется условием взаимного исключения. 4. Процессы, которые находятся вне своих критических разделов и не собираются в них входить, не могут помешать другим процессам войти в их критические разделы. Если в критическом разделе нет процессов, а есть процессы, которые хотят войти в него, только процессы, не запущенные в критическом разделе, должны решить, какой процесс войдет в их критический раздел. Это решение не должно приниматься бесконечно. Это условие называется условием выполнения. 5. Процесс не должен ждать неопределенное время, прежде чем попасть в свой критический раздел. С момента, когда процесс запрашивает разрешение на вход в свой критический раздел, и до получения разрешения, другие процессы могут проходить через его критический раздел только ограниченное количество раз. Это условие называется условием ограниченного ожидания.На рисунке 5 представлена классификация семафоров по технологии решения задач. Рис.5 - Определение и виды семафоров.2.4 Постановка задачи по синхронизации потоковУсловие задачи:Написать простое приложение, которое выводит 2 последовательности на С++. Необходимо синхронизировать вывод последовательностей с помощью семафоров.Алгоритм - каждую из двух последовательностей потоки выводят вместе.2.5 Разработка программы решения задачи#include #include using namespace std;HANDLE hSemaphore;int m[25];// глобальный массив для вывода на экран // функцияпотокаDWORD WINAPI ThreadFunc(LPVOID lpParam) { for(int i=0; i<25; i++){ WaitForSingleObject(hSemaphore,INFINITE); cout << m[i] << " "; ReleaseSemaphore(hSemaphore,1,NULL);} // поэлементный вывод массива на экран cout << endl; return 0;} int main(){ SetConsoleOutputCP(1251); cout << "Вывод двух возрастающих последовательностей:"<#include using namespace std;HANDLE hSemaphore;int m[25];// глобальный массив для вывода на экран // функцияпотокаDWORD WINAPI ThreadFunc(LPVOID lpParam) { for(int i=0; i<25; i++){ WaitForSingleObject(hSemaphore,INFINITE); cout << m[i] << " "; ReleaseSemaphore(hSemaphore,1,NULL);} // поэлементный вывод массива на экран cout << endl; return 0;} int main(){ SetConsoleOutputCP(1251); cout << "Вывод двух возрастающих последовательностей:"<

Список используемых источников
1. Бэкон, Д. Операционные системы/ Д.Бэкон. - СПб.: Питер, BHV, 2004 г. - 800с.
2. Гордеев, А.В. Операционные системы: Учебник для вузов/ А.В.Гордеев. -2-е изд.-СПб.и др.: Питер, 2004 г.- 415 с. Олифер, В.Г. Сетевые операционные системы/ В.Г.Олифер, Н.А.Олифер.- СПб.: Издательский дом «Питер», 2001 г. - 544 с.
3. Побегайло А. П. - Системное программирование в Windows. / А. П. Побегайло - СПб: БХВ-Петербург, 2006 г. - 1056 с. Столингс, В. Операционные системы/В. Столлингс. - 4-е издание. - М.: Вильямс, 2004 г. - 848 с.
4. Таненбаум Э. Операционные системы: Разработка и реализация 3-е издание. / Э Таненбаум, А Вудхалл - СПб.: 2007 г.- 704 с. . Таненбаум, Э. Современные операционные системы/ Э.Таненбаум. - СПб.: Издательский дом «Питер», 2005. - 1038 с.
5. Эндрюс Г.Р. Основы многопоточного, параллельного и распределённого программирования/ Г. Р. Эндрюс - СПб: “Вильямс”, 2003. - 512 с.
6. Л.А. Коршикова. Операционные системы как системы управления вычислительными ресурсами: Учебное пособие. - Новосибирск: НГТУ, 2001. - 63 с.
7. Коршикова Л.А. Основы операционных систем. Учебное пособие. - Новосибирск.: НГТУ, 2008. - 356 с.
8. Коршикова Л.А. Лабораторный практикум по дисциплине "Операционные системы": Методическое пособие. - Новосибирск.
9. Таненбаум Э. Современные операционные системы. 4-ое изд. - СПб.:Питер, 2006, - 1040с.