Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция _5_ОС.doc
Скачиваний:
12
Добавлен:
01.07.2025
Размер:
138 Кб
Скачать
☆

1.4 Ждущие таймеры

Ждущий таймер (waitable timer) представляет собой новый тип объектов синхронизации, под­держиваемый в Windows NT версии 4.0 и выше. Это полноценный объект синхронизации, кото­рый может использоваться для организации задержки в одном или нескольких приложениях.

Ждущий таймер работает в трех режимах. В режиме «ручного сброса» таймер переходит в установленное состояние при истечении заданной задержки и остается установленным до тех пор, пока функция SetWaitableTimer не задаст новую задержку. В режиме «автоматического сбро­са» таймер переходит в установленное состояние при истечении заданной задержки и остается установленным до первого успешного вызова функции ожидания. В этом режиме он напоминает объект Event в режиме автоматического сброса, поскольку каждый раз при истечении времени задержки разрешается выполнение лишь одной нити. Наконец, ждущий таймер может выполнять функции интервального таймера, который перезапускается с заданной задержкой после каждого срабатывания объекта.

Главная особенность, отличающая ждущие таймеры от системных, — то, что ждущие таймеры могут совместно использоваться несколькими приложениями. Например, вы можете приостано­вить несколько приложений в фоновом режиме так, чтобы они «просыпались» каждые несколько часов для выполнения некоторой операции.

Процессы получают дескрипторы ждущих таймеров так же, как они получают дескрипторы мьютексов: дублированием, наследованием или открытием по имени.

В следующей таблице перечислены функции, предназначенные для работы со ждущими таймерами.

Функция

Описание

CancelWaitableTimer

СгеаteWaitableTimer

OpenWaitableTirner

SetWaitableTimer

Останавливает работу ждущего таймера. Таймер остается в текущем состоянии

Создает объект ждущего таймера. Если таймер с заданным именем уже существует, он открывается

Открывает существующий ждущий таймер

Запускает ждущий таймер с заданной продолжительностью и интервалом срабатывания

2 Задачи синхронизации.

2.1 Задача «производитель-потребитель»

Имеется два типа взаимодействующих процессов с жестко распределенными между ними функциями. Процессы-производители вырабатывают сообщения, предназначенные для восприятия и обработки другими процессами-потребителями. Процессы взаимодействуют через некоторую обобщенную область памяти, которая по смыслу является критическим ресурсом. В эту область процесс-производитель должен поместить очередное сообщение, а процесс-потребитель - считывать очередное сообщение. Необходимо согласовать работу этих процессов по обмену сообщениями таким образом, чтобы выполнялись следующие требования:

- требования задачи взаимного исключения по отношению к критическому ресурсу - обобщенной памяти для хранения сообщения;

- учитывается состояние обобщенной области памяти, характеризующей возможность или невозможность посылки (принятия) очередного сообщения.

Попытка процесса-производителя поместить очередное сообщение в область, из которой не было считано предыдущее сообщение процессом-потребителем, должна быть блокирована. Процесс-потребитель должен быть либо оповещен о невозможности помещения сообщения, либо переведен в состояние ожидания возможности поместить очередное сообщение через некоторое время в область памяти, по мере ее освобождения. Аналогично должна быть заблокирована попытка процесса-потребителя считать сообщение из области в ситуации, когда процесс-производитель не поместил туда очередного сообщения. В этом случае необходимо выдать сообщение о невозможности считывания либо перевести процесс-потребитель в состояние ожидания поступления очередного сообщения. Если используется вариант с ожиданием изменения состояния обобщенной области для хранения сообщений, необходимо обеспечить перевод ожидающих процессов в состояние готовности всякий раз, когда изменится состояние области.

Множественность постановки задачи «производитель-потребитель» определяется тем, что число процессов-потребителей и процессов-производителей может быть больше одного. Каждый из таких процессов может устанавливать не только одностороннюю, но и двухстороннюю связь через одну и ту же обобщенную область или другие области. Области могут хранить большое количество сообщений.