Question

Remarque : j'ai lu d'autres articles sur la procédure de verrouillage et de déverrouillage d'un fichier. Je n'ai rien trouvé de spécial dont je n'étais pas au courant. Donc, je vais mettre mon scénario ici pour que quelqu'un puisse donner quelques suggestions.

D'après mon expérience, FileChannel.lock ne garantit pas la situation de verrouillage et de déverrouillage d'un fichier lorsque différents objets de plusieurs instances de jvm tentent de verrouiller et de mettre à jour le fichier.

Dans mon application, le scénario est le suivant: trois programmes distincts mettent à jour un fichier. Ces programmes sont exécutés sur différentes instances de JVM. Supposons que les programmes sont A, B et C et que le fichier est F. Si A verrouille le fichier F, B et C doivent attendre que F soit libéré avant que l’un des autres programmes ne puisse le récupérer. Cela fonctionne bien si les programmes sont exécutés sur la même instance de jvm. Malheureusement, cela ne fonctionne pas dans plusieurs instances JVM.

J'ai eu une autre idée qui consistait à avoir un fichier plat dans lequel j'indiquerais si F doit être mis à jour. Le contenu de ce fichier plat peut être verrouillé ou déverrouillé. La valeur par défaut / initiale serait UNLOCKED. Ainsi, lorsqu'un programme souhaite mettre à jour F, il doit voir l'indicateur dans le fichier à plat. Si l'indicateur indique LOCKED, il devrait attendre. Dans cette approche, cependant, il y a un problème: que se passe-t-il si plusieurs programmes ouvrent le fichier à plat en même temps et voient le message "UNLOCKED"? ou deux programmes qui attendaient que le fichier à plat soit lu avec UNLOCKED et que les fichiers se lisent "UNLOCKED"??

?

Une idée les gars?

Était-ce utile?

La solution

Si vous avez besoin de verrouiller un système de fichiers, vous devez créer un répertoire. Répertoire existant signifie "verrouillé", le répertoire manquant signifie déverrouillé.

La raison en est que la création et la suppression de répertoires doivent être des opérations atomiques dans tout système de fichiers. Donc, dès que deux processus tentent de créer le même répertoire, l’un d’eux recevra une erreur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top