- •Санкт-Петербургский государственный политехнический университет Институт Информационных Технологий и Управления
- •Примитивы синхронизации в ос Windows Работу выполнил студент гр. 53501/3 Мартынов с. А. Работу принял преподаватель Душутина е. В.
- •Постановка задачи
- •Введение
- •1 Примитивы синхронизации
- •3 [ 25 / 3 / 2015 18 : 41 : 56 ] Config :
- •Листинг 10: Протокол работы писателя
- •Листинг 11: Протокол работы читателя
- •8 [ 25 / 3 / 2015 18 : 41 : 56 ] Release Semaphore
- •9 [ 25 / 3 / 2015 18 : 41 : 56 ] Waining for Semaphore
- •Демонстрация работы синхронизации через критическую секцию показана на рисунке 4.
- •Листинг 22: Единственный поток-писатель (src/SynchronizationPrimitives/ThreadsReaderWriter/threadWriter.Cpp)
- •Листинг 23: Потоки читатели(src/SynchronizationPrimitives/ThreadsReaderWriter/threadReader.Cpp)
- •Каждый читатель, в соответствии с условиями задачи, по одному разу прочитал сообщение писателя (рисунок 7).
- •Листинг 27: Потоки читатели (src/SynchronizationPrimitives/ProcessReader/main.Cpp)
- •Листинг 29: Один из читателей
- •Листинг 32: Запуск клиентских процессов (src/SynchronizationPrimitives/NoMemProcessWriter/utils.C
- •Листинг 33: Потоки читатели (src/SynchronizationPrimitives/NoMemProcessReader/main.Cpp)
- •Результат работы на рисунке 10.
- •3 Рациональное решениезадачи читатели-писатели
- •Листинг 38: Протокол работы читателя
- •Сервер создаёт именованный канал, и начинает писать; клиент подцепляется к каналу, иначинает читать (рисунок 12).
- •Листинг 42: Протокол работы клиента-читателя
- •5 Сетевая версиязадачи читатели-писатели
- •Листинг 44: Клиент (src/SynchronizationPrimitives/NetReaderWriterClient/main.Cpp)
- •Листинг 46: Клиент (src/SynchronizationPrimitives/FullReaderWriterClient/main.Cpp)
- •Результаты работы программы показаны на рисунке 17 и в листинге 48 (в этом отрывке опять наблюдается наложение записей, т.К. Несколько потоков пишут в 1 файл).
- •Заключение
- •Список литературы
Санкт-Петербургский государственный политехнический университет Институт Информационных Технологий и Управления
Кафедра компьютерных систем и программных технологий
Отчёт по расчётной работе № 3
по предмету «Системное программное обеспечение»
Примитивы синхронизации в ос Windows Работу выполнил студент гр. 53501/3 Мартынов с. А. Работу принял преподаватель Душутина е. В.
Санкт-Петербург 2014
Содержание
Постановка задачи 3
Введение 5
Примитивы синхронизации 6
Использование мьютексов 13
Использование семафоров 19
Критические секции 30
Объекты-события в качестве средства синхронизации 35
Условные переменные 40
Задача читатели-писатели (для потоков одного процесса) 47
Задача читатели-писатели (для потоков разных процессов) 55
Модификация задачи читатели-писатели без доступа к памяти 70
Рациональное решение задачи читатели-писатели 82
Клиент-серверное приложение для полной задачи читатели-писатели 91
Сетевая версия задачи читатели-писатели 108
Задача производители-потребители 116
Задача обедающие философы 128
Заключение 136
Список литературы 138
Постановка задачи
В рамках данной работы необходимо ознакомиться с основными примитивами синхрониза- ции в ОС Windows, и выполнить практические задачи.
Потоки разделяют целочисленный массив, в который заносятся производимые и извле- каются потребляемые данные. Для наглядности и контроля за происходящим в буфер помещается наращиваемое значение, однозначно идентифицирующее производителя и номер его очередной посылки[1].
Код должен удовлетворять трем требованиям:
потребитель не должен пытаться извлечь значение из буфера, если буфер пуст;
производитель не должен пытаться поместить значение в буфер, если буфер полон;
состояние буфера должно описываться общими переменными (индексами, счётчиками, указателями связанных списков и т.д.).
Задание необходимо выполнить различными способами, применив следующие средства синхронизации доступа к разделяемому ресурсу:
Мьютексы;
Семафоры;
Критические секции;
Объекты события;
Условные переменные;
Функции ожидания.
Создать аналогичные программы для множества потоков, количество которых можно задать из командной строки.
Программы должны предоставлять возможность завершения по таймеру либо по команде оператора.
Полные исходные коды сделать доступными по адресу https://github.com/SemenMartynov/ SPbPU_SystemProgramming.
Отчёт должен содержать:
Результаты выполнения предложенных в методическом пособии программ и их анализ.
Решение задачи читатели-писатели таким образом, чтобы читатели не имели доступа к памяти по записи.
Более рациональное решение задачи читатели-писатель, используя другие средства синхронизации или их сочетание.
Клиент-серверное приложение для полной задачи читатели-писатели.
Программу читатели-писатели для сетевого функционирования (для этого необходимо выбрать подходящие средства IPC и синхронизации).
Решение задачи производители-потребители (разница с предыдущей задачей в воз- можности модификации считываемых данных).
Задачу "обедающие философы"с обоснованием выбранных средств синхронизации.