Нарушение оппортунистических блокировок

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

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

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

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