Bloqueos oportunistas importantes

Romper un bloqueo oportunista es el proceso de degradar el bloqueo que un cliente tiene en un archivo para que otro cliente pueda abrir el archivo, con o sin un bloqueo oportunista. Cuando el otro cliente solicita la operación de apertura, el servidor retrasa la operación de apertura y notifica al cliente que contiene el bloqueo oportunista.

A continuación, el cliente que contiene el bloqueo realiza acciones adecuadas para el tipo de bloqueo, por ejemplo, abandonando los búferes de lectura, cerrando el archivo, etc. Solo cuando el cliente que contiene el bloqueo oportunista notifica al servidor que hace que el servidor abra el archivo para el cliente que solicita la operación de apertura. Sin embargo, cuando se interrumpe un bloqueo de nivel 2, el servidor informa al cliente de que se ha roto, pero no espera ninguna confirmación, ya que no hay datos almacenados en caché que se van a vaciar en el servidor.

Al reconocer un salto de cualquier bloqueo exclusivo (filtro, nivel 1 o lote), el titular de un bloqueo roto no puede solicitar otro bloqueo exclusivo. Puede degradar un bloqueo exclusivo a un bloqueo de nivel 2 o ningún bloqueo. El titular normalmente libera el bloqueo y cierra el archivo cuando está a punto de cerrar el archivo de todos modos.

Se notifica a las aplicaciones que un bloqueo oportunista se interrumpe mediante el miembro hEvent de la estructura SUPERPUESTA asociada al archivo en el que se interrumpe el bloqueo. Las aplicaciones también pueden usar funciones como GetOverlappedResult y HasOverlappedIoCompleted.