Verrous opportunistes cassants
La rupture d’un verrou opportuniste est le processus de dégradation du verrou qu’un client possède sur un fichier afin qu’un autre client puisse ouvrir le fichier, avec ou sans verrou opportuniste. Lorsque l’autre client demande l’opération d’ouverture, le serveur retarde l’opération d’ouverture et avertit le client en tenant le verrou opportuniste.
Le client qui conserve le verrou prend ensuite les mesures appropriées au type de verrou, par exemple en abandonnant les mémoires tampons de lecture, en fermant le fichier, etc. Ce n’est que lorsque le client qui détient le verrou opportuniste avertit le serveur que c’est terminé que le serveur ouvre le fichier pour le client qui demande l’opération d’ouverture. Toutefois, lorsqu’un verrou de niveau 2 est rompu, le serveur signale au client qu’il a été endommagé, mais n’attend aucun accusé de réception, car aucune donnée mise en cache ne doit être vidée sur le serveur.
En reconnaissant la rupture d’un verrou exclusif (filtre, niveau 1 ou lot), le détenteur d’un verrou cassé ne peut pas demander un autre verrou exclusif. Il peut dégrader un verrou exclusif en verrou de niveau 2 ou aucun verrou du tout. Le titulaire libère généralement le verrou et ferme le fichier quand il est sur le point de fermer le fichier de toute façon.
Les applications sont averties qu’un verrou opportuniste est rompu à l’aide du membre hEvent de la structure OVERLAPPED associée au fichier sur lequel le verrou est rompu. Les applications peuvent également utiliser des fonctions telles que GetOverlappedResult et HasOverlappedIoCompleted.