Прерывание уступающих блокировок


Прерывание уступающей блокировки является процессом разрушения блокировки, которую один клиент имеет на файле для того, чтобы другой клиент мог открыть файл с или без уступающей блокировки. Когда другой клиент запрашивает операцию открытия, сервер задерживает операцию открытия и уведомляет клиента, удерживающего уступающую блокировку.

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

В подтверждение прерывания любой исключающей блокировки (фильтр, уровень 1 или пакет), держатель прерванной блокировки не может запросить другую исключающую блокировку. Это может понизить исключающую блокировку до блокировки уровня 2 или разрушить блокировку вообще. Держатель обычно освобождается от блокировки и закрывает файл тогда, когда он собирается закрыть файл так или иначе.

Приложения получают уведомление, что уступающая блокировка прервана при помощи использования члена hEvent структуры OVERLAPPED, связанной с файлом на котором блокировка прервана. Прикладные программы могут также использовать такие функции как GetOverlappedResult и HasOverlappedIoCompleted.

Назад в оглавление
На главную страницу

Hosted by uCoz