ВУЗ:
Составители:
ReleaseSemaphore() и в качестве параметра lReleaseCount передать число 10, как семафор не просто будет снова пропускать
потоки, т.е. станет доступным, но и увеличит значение своего счетчика до прежнего числа – до 10. Это мощное средство мо-
жет привести к возникновению в приложении трудно отслеживаемых ошибок, поэтому следует использовать его с большой
осторожностью.
Семафоры могут быть полезны при совместном использовании ограниченных ресурсов. Предположим, имеется три
приложения, каждое из которых должно выполнить вывод на печать, а у компьютера только два параллельных порта. Уста-
новив семафор с начальным значением счетчика ресурсов, равным двум, можно заставить приложения запрашивать сервис
печати только тогда, когда есть свободный параллельный порт.
Для освобождения дескриптора семафора, выделенного ему с помощью функции CreateSemaphore(), не забудьте вы-
звать функцию CloseHandle().
• Ждущий таймер (waitable timer) представляет собой новый тип объектов синхронизации, поддерживаемый в
Windows NT версии 4.0 и выше. Это полноценный объект синхронизации, который может использоваться для организации
задержки в одном или нескольких приложениях.
Ждущий таймер работает в трех режимах. В режиме "ручного сброса" таймер переходит в установленное состояние при ис-
течении заданной задержки и остается установленным до тех пор, пока функция SetWaitableTimer не задаст новую задержку. В
режиме "автоматического сброса" таймер переходит в установленное состояние при истечении заданной задержки и остается
установленным до первого успешного вызова функции ожидания. В этом режиме он напоминает объект Event в режиме ав-
томатического сброса, поскольку каждый раз при истечении времени задержки разрешается выполнение лишь одной нити.
Наконец, ждущий таймер может выполнять функции интервального таймера, который перезапускается с заданной задерж-
кой после каждого срабатывания объекта.
Главная особенность, отличающая ждущие таймеры от системных, – то, что ждущие таймеры могут совместно исполь-
зоваться несколькими приложениями. Например, можно приостановить несколько приложений в фоновом режиме так, что-
бы они "просыпались" каждые несколько часов для выполнения некоторой операции.
Процессы получают дескрипторы ждущих таймеров так же, как они получают дескрипторы мьютексов: дублированием,
наследованием или открытием по имени.
В таблице 6 перечислены функции, предназначенные для работы со ждущими таймерами.
6. Функции для работы со ждущими таймерами
Функция Описание
CancelWaitableTimer
Останавливает работу ждущего таймера. Тай-
мер остается в текущем состоянии
СгеаteWaitableTimer
Создает объект ждущего таймера. Если таймер
с заданным именем уже существует, он от-
крывается
OpenWaitableTirner Открывает существующий ждущий таймер
SetWaitableTimer
Запускает ждущий таймер с заданной продол-
жительностью и интервалом срабатывания
ЗАДАНИЕ ДЛЯ ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ
1. Учитывая особенности методов синхронизации, сформулировать три задачи, демонстрирующие возможности ОС по
синхронизации потоков следующими способами:
1) критические секции;
2) мьютексы;
3) события.
2. Разработать программу, реализующую решение сформулированных задач с визуализацией результатов работы.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Какие алгоритмы планирования потоков вы знаете?
2. Планирование потоков в системах реального времени.
3. Понятие синхронизации.
4. Как осуществляется синхронизация потоков критическими секциями?
5. Каковы особенности синхронизации с помощью мьютексов? Для каких задач они применяются?
6. Опишите применение событий для решения задачи синхронизации.
Страницы
- « первая
- ‹ предыдущая
- …
- 30
- 31
- 32
- 33
- 34
- …
- следующая ›
- последняя »