- •Процессы и задачи в Microsoft Windows
- •Запуск задач
- •Управление запущенными задачами
- •Изменение приоритета задачи
- •Определение приоритета задачи
- •Приостановка и возобновление выполнения задачи
- •Временная приостановка работы задачи
- •Завершение задачи
- •Освобождение идентификатора задачи
- •Критические секции
- •Инициализация критической секции
- •Удаление критической секции
- •Вход в критическую секцию и выход из нее
- •4. Контрольные вопросы
- •5. Содержание работы
- •Создание объекта - событие
- •Открытие объекта - событие
- •Управление состоянием объекта - событие
- •Объекты – событие с автосбросом
- •Создание объекта Mutex
- •Освобождение идентификатора объекта Mutex
- •Открытие объекта Mutex
- •Как завладеть объектом Mutex
- •Освобождение объекта Mutex
- •Как работает семафор
- •Функции для работы с семафорами
- •Создание семафора
- •Уничтожение семафора •
- •Увеличение значения счетчика семафора
- •Уменьшение значения счетчика семафора
- •Определение текущего значения счетчика семафора
- •Создание и открытие ожидаемого таймера
- •Функции для работы с ожидаемым таймером
- •Контрольные вопросы
- •Содержание работы
- •Содержание отчета
- •Теоретический материал
- •7.1. Универсальные функции для работы с файлами в операционных системах Microsoft Windows
- •Функция CreateFile
- •Функция CloseHandle
- •Функции ReadFile и WriteFile
- •Механизм отображения файлов на память
- •Создание отображения файла
- •Выполнение отображения файла в память
- •Открытие отображения
- •Отмена отображения файла
- •Принудительная запись измененных данных
- •Обмен через файлы, отображаемые на память
- •Пример приложения, использующего файлы, отображаемые на память
- •Именованные и анонимные каналы
- •Имена каналов
- •Реализации каналов
- •Создание канала
- •Установка соединения с каналом со стороны сервера
- •Пример приложения, использующего каналы передачи данных Pipes
- •Создание канала Mailslot
- •Открытие канала Mailslot
- •Запись сообщений в канал Mailslot
- •Чтение сообщений из канала Mailslot
- •Определение состояния канала Mailslot
- •Изменение состояния канала Mailslot
- •Пример приложения, использующего каналы передачи данных MailSlot
- •Пример приложения, использующего передачу сообщений между процессами
Удаление критической секции
Если критическая секция больше не нужна, ее нужно удалить при помощи функции DeleteCriticalSection, как это показано ниже:
DeleteCriticalSection(scsWindowPaint);
При этом освобождаются все ресурсы, созданные операционной системой для критической секции.
Вход в критическую секцию и выход из нее
Две основные операции, выполняемые задачами над критическими секциями, - это вход в критическую секцию и выход из критической секции.
Первая операция выполняется при помощи функции EnterCriticalSection, вторая - при помощи функции LeaveCriticalSection. Эти функции, не возвращающие никакого значения, всегда используются в паре, как это показано в следующем фрагменте исходного текста программы:
EnterCriticalSection(&csWindowPaint);
hdc=BeginPaint(hWnd,&ps);
GetClientRect(hWnd,&rc);
DrawText(hdc,"Text",-1,&rc,
DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hWnd,&ps);
LeaveCriticalSection(&csWindowPaint);
В качестве единственного параметра функциям EnterCriticalSection и LeaveCriticalSection необходимо передать адрес структуры типа CRITICAL_SECTION, проинициализиро-ванной предварительно функцией InitializeCriticalSection.
Критические секции работают следующим образом. Если одна задача вошла в критическую секцию, но еще не вышла из нее, то при попытке других задач войти в ту же самую критическую секцию они будут переведены в состояние ожидания. Задачи пробудут в этом состоянии до тех пор, пока задача, которая вошла в критическую секцию, не выйдет из нее.
Таким образом, гарантируется, что фрагмент кода, заключенный между вызовами функций EnterCriticalSection и LeaveCriticalSection, будет выполняться задачами последовательно, если все они работают с одной и той же критической секцией.
Номер варианта
Последняя цифра зачетной книжки |
|||||||||
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Номер варианта |
|||||||||
4 |
6 |
3 |
7 |
5 |
8 |
1 |
9 |
2 |
10 |
Варианты заданий
Номер варианта |
Номер серии |
Приоритет задач |
||||
1 |
1 |
А |
Б |
В |
Г |
Д |
2 |
Б |
Б |
В |
Г |
Д |
|
3 |
В |
В |
Г |
Д |
Е |
|
4 |
Г |
Д |
Е |
Е |
Ж |
|
5 |
Д |
Е |
Е |
Ж |
Ж |
|
2 |
1 |
А |
А |
Б |
В |
Г |
2 |
Б |
В |
Б |
Г |
Д |
|
3 |
В |
В |
Б |
Б |
Д |
|
4 |
В |
Е |
Е |
Д |
Ж |
|
5 |
Ж |
Д |
Е |
Ж |
Е |
|
3 |
1 |
Г |
Б |
А |
А |
Б |
2 |
В |
Д |
Б |
Г |
Д |
|
3 |
В |
В |
Б |
Б |
А |
|
4 |
Г |
Д |
Е |
Ж |
Е |
|
5 |
Е |
Ж |
Д |
Ж |
Е |
|
4 |
1 |
А |
Г |
Д |
А |
Б |
2 |
Б |
В |
Б |
В |
Д |
|
3 |
В |
Г |
Д |
В |
Б |
|
4 |
Е |
Ж |
Ж |
В |
Е |
|
5 |
Е |
Ж |
Ж |
Ж |
Е |
|
5 |
1 |
А |
Г |
Б |
Д |
А |
2 |
Б |
В |
Д |
В |
Г |
|
3 |
В |
Д |
Г |
В |
Б |
|
4 |
Д |
Е |
Е |
Ж |
Г |
|
5 |
Ж |
Ж |
Е |
Е |
Д |
|
6 |
1 |
Б |
А |
Д |
А |
В |
2 |
В |
Б |
Г |
Д |
Д |
|
3 |
В |
Б |
В |
Г |
Д |
|
4 |
В |
Г |
Е |
Е |
Ж |
|
5 |
Д |
Е |
Е |
Ж |
Ж |
|
7 |
1 |
В |
А |
Г |
Д |
Б |
2 |
Д |
Г |
Д |
Б |
В |
|
3 |
Е |
Е |
Ж |
Е |
Д |
|
4 |
Б |
В |
В |
Д |
Г |
|
5 |
Ж |
Ж |
Е |
Е |
Д |
|
8 |
1 |
Б |
В |
Д |
А |
А |
2 |
Г |
В |
Б |
Д |
Б |
|
3 |
Г |
В |
В |
Д |
В |
|
4 |
Е |
Е |
Д |
Д |
Д |
|
5 |
Д |
Е |
Ж |
Ж |
Е |
|
9 |
1 |
Д |
А |
А |
Б |
В |
2 |
Б |
Д |
Д |
В |
Г |
|
3 |
В |
Б |
В |
Д |
В |
|
4 |
Е |
Е |
Д |
Г |
Г |
|
5 |
Ж |
Е |
Ж |
Ж |
Е |
|
10 |
1 |
Б |
Д |
А |
А |
Г |
2 |
Г |
Б |
В |
Д |
Д |
|
3 |
В |
В |
В |
Г |
Г |
|
4 |
Д |
Д |
Е |
Е |
Е |
|
5 |
Ж |
Е |
Д |
Е |
Ж |
|
где
Код |
Приоритет |
А |
THREAD_PRIORITY_IDLE |
Б |
THREAD_PRIORITY_HIGHEST |
В |
THREAD_PRIORITY_ABOVE_NORMAL |
Г |
THREAD_PRIORITY_NORMAL |
Д |
THREAD_PRIORITY_BELOW_NORMAL |
Е |
THREAD_PRIORITY_LOWEST |
Ж |
THREAD_PRIORITY_TIME_CRITICAL |
Лабораторная работа №2
«Синхронизация задач в операционных системах
Microsoft Windows»
Цель занятия
Изучение способов синхронизации параллельно выполняющихся задач в операционных системах Microsoft Windows. Доработка учебного мультизадачного приложения.
Литература
Фролов А.В., Фролов Г.В. Программирование для Windows NT. – М: ДИАЛОГ-МИФИ, 1996. – 272 с. – (Библиотека системного программиста; Т.26).
Фролов А.В., Фролов Г.В. Операционная система Windows 95 для программиста. – М: ДИАЛОГ-МИФИ, 1996. – (Библиотека системного программиста; Т.22).
Фролов А.В., Фролов Г.В. Графический интерфейс GDI в Microsoft Windows. – М: ДИАЛОГ-МИФИ, 1994. – (Библиотека системного программиста; Т.14).
Саймон Р. Windows 2000 API Энциклопедия. – М: ДиаСофт, 2002.- 1088 с.
Неббет Г. Справочник по базовым функциям API Windows NT/2000. – М: Вильямс, 2002. – 528 с.
3. Выполнение работы
Изучить:
способ синхронизации задач с помощью объектов – событие, Mutex, семафоров и ожидаемых таймеров;
способы построения MDI-приложений;
разработать алгоритм работы учебного мультизадачного приложения;
доработать, созданное на лабораторной работе №1 учебное приложение;
составить отчет по проделанной работе в соответствии с требованиями, предъявляемыми в пункте 6 настоящего пособия.
