Тема: Объекты синхронизации WIN32
Язык программирования: Паскаль
Компилятор: Delphi 2-8 (dcc32.exe)
ОС: семейства WIN32
Содержание работы: Реализовать в зависимости от задачи варианта один из механизмов
синхронизации задач с несколькими потоками выполнения
Требования:
- Использование только вызовов API
- Желательно описание внешних вызовов ОС производить непосредственно в своем коде (разрешено пользоваться описанием windows.pas)
- Обработка ошибок и их анализ по каждому вызову функций API
- Остановка исследуемого процесса по вводу символа «а» с клавиатуры
Конечный результат:
- Получить требуемую в варианте величину.
- Пакетный файл компиляции.
- Отчет с выводами и анализом результатов. В анализ должны входить оценки вероятностных показателей измеренной в варианте величины.
- Файл с «трейсом» работы объекта синхронизации. Формат - удобный для чтения.
- Исходный код программы на дискете.
Варианты:
- Реализовать схему «оповещения» трех ожидающих потоков о помещении в очередь (произвольного формата) некоторого сообщения на основе объекта синхронизации «событие». Генерируют события в очередь два потока, которые имеют приоритет на уровень ниже, чем ожидающие. Посчитать среднее число обработанных каждым потоком сообщений. Очередь должна быть защищена критической секцией.
- Реализовать критическую секцию на основе объекта синхронизации типа «событие». Продемонстрировать функционирование на примере защиты реализованной критической секцией некоторой очереди сообщений произвольного формата.
- Отобразить файл размера 32К в память. Реализовать транспортировку данных из отображения в файл на диске (один поток). Два других потока записывают некоторые данные в это отображение. Синхронизация доступа к данным отображения осуществляется при помощи объекта синхронизации типа «мьютекс».
- Реализовать семафор на основе объекта синхронизации «событие». Количественные характеристики семафора должны быть аналогичны соответствующему объекту ядра типа семафор.
- Реализовать моделирование «тупика» на примере работы с критическими секциями. Временные параметры модели определяются до начала моделирования (произвольны, но обязательно изменяемы). Провести анализ вероятности тупика, если она равна 1, то обосновать.
- Реализовать моделирование «гонок» на примере работы с критическими секциями. Временные параметры модели определяются до начала моделирования (произвольны, но обязательно изменяемы). Провести анализ вероятности тупика, если она равна 1, то обосновать.
- (со звездочкой) Реализовать моделирование «столкновений» на примере работы с критическими секциями. Временные параметры модели определяются до начала моделирования (произвольны, но обязательно изменяемы). Провести анализ вероятности тупика, если она равна 1, то обосновать.
- Реализовать мьютекс на основе объекта синхронизации «событие». Количественные характеристики мьютекс должны быть аналогичны соответствующему объекту ядра типа мьютекс.
- Организовать совместное использование мьютекса и события для защиты добавления элемента в очереди. Очередь произвольного формата. Событие сигнализирует чтение из очереди, а мьютекс - запись. Требуется снять статистику по времени использования объектов ядра.
- Реализовать на мьютексе семафор. Количественные характеристики семафора должны быть аналогичны соответствующему объекту ядра типа семафор.
|