Maison  >  Article  >  développement back-end  >  Explication détaillée des verrous de lecture et d'écriture des fichiers PHP

Explication détaillée des verrous de lecture et d'écriture des fichiers PHP

巴扎黑
巴扎黑original
2017-08-21 14:14:382483parcourir

Les problèmes liés à la lecture et à l'écriture existeront toujours. Le verrouillage des fichiers est conçu pour résoudre ce problème. En fait, il s'agit d'un simple sémaphore. La corrélation lecture-écriture fait référence au conflit aléatoire de données de fichier provoqué par la lecture et l'écriture simultanées de fichiers. Afin de savoir clairement quand et quelles opérations ont été utilisées pour modifier ou lire les données du fichier, il est nécessaire de sérialiser, atomiser et synchroniser les opérations afin que les utilisateurs puissent savoir exactement quelles données se trouvent dans le fichier à quel moment. File Lock est l'un de ces outils.

Les systèmes de fichiers ont généralement deux types de verrous, les verrous partagés et les verrous exclusifs, qui peuvent également être appelés verrous en lecture et verrous en écriture.

Caractéristiques des verrous du système de fichiers :

Un fichier ne peut avoir qu'un seul verrou lorsqu'il est ouvert, ce qui signifie que pas plus de deux verrous peuvent être attribués à un fichier en même temps.

Les utilisateurs qui lisent et écrivent des fichiers verrouillés peuvent détenir ce verrou, c'est-à-dire que les utilisateurs qui détiennent ce verrou peuvent effectuer les opérations correspondantes sur le fichier, telles que la lecture ou l'écriture. L'utilisateur peut demander le verrouillage d'un fichier. Si le fichier est initialement déverrouillé, le système crée un verrou pour le fichier avant de demander le verrouillage, puis le demandeur le détient.

Règles de maintien des verrous : Si ce fichier possède déjà un verrou en lecture (partagé), les autres utilisateurs ne peuvent pas attribuer un verrou exclusif ou un verrou en lecture seule au fichier, mais ils peuvent détenir le verrou, c'est-à-dire Par exemple, d'autres utilisateurs peuvent lire le fichier, mais tant que le fichier est verrouillé, aucun utilisateur ne peut y écrire. Si le fichier possède déjà un verrou exclusif et est détenu par un utilisateur, aucun utilisateur ne peut à nouveau détenir le verrou à moins que le détenteur ne le déverrouille.

Il y a un concept important à retenir : le fonctionnement du fichier lui-même n'a rien à voir avec le verrouillage. Que le fichier soit verrouillé ou non, l'utilisateur peut effectuer n'importe quelle opération normale sur le fichier à volonté. , mais le fonctionnement Le système vérifiera la serrure et donnera différents traitements à différentes situations. Par exemple, dans une situation sans verrouillage, n'importe qui peut lire et écrire n'importe quel fichier en même temps. Bien entendu, il est très probable que le contenu lu et écrit soit erroné - notez que seul le contenu est erroné, ainsi que l'opération. je n'aurai pas tort. Après le verrouillage, certaines opérations seront refusées dans certaines circonstances. Le rôle des verrous de fichiers n'est pas de protéger les fichiers et les données eux-mêmes, mais d'assurer la synchronisation des données. Par conséquent, les verrous de fichiers ne sont véritablement efficaces que pour l'utilisateur qui détient le verrou, et seulement si tous les utilisateurs utilisent le même et identique. manière d'utiliser le fichier. Le verrouillage de fichier ne peut être efficace pour tous les utilisateurs que si la limite de verrouillage fonctionne sur le fichier. Sinon, tant qu'il y a une exception, toute la fonction de verrouillage de fichier sera détruite. Par exemple, si tout le monde suit les étapes d'ouverture d'un fichier, de verrouillage, de lecture et d'écriture, de déverrouillage et de fermeture du fichier, il n'y aura aucun problème avec les opérations de chacun, car sur la base des principes d'allocation et de conservation des verrous de fichiers, les données dans le fichier La mise à jour existe comme une opération atomique et est indivisible, elle est donc également synchrone et sûre. Mais si une personne ne franchit pas cette étape, elle aura alors des problèmes de lecture et d’écriture, soit elle ne peut pas lire avec précision, soit elle ne peut pas écrire, etc.

Sur la base des principes ci-dessus, il convient de déterminer si les données lues sont verrouillées. De manière générale, le verrouillage exclusif est la seule opération lors de l'écriture de données. Il garantit que les données écrites dans le fichier sont correctes. Lorsque le fichier est verrouillé, les autres utilisateurs ne peuvent pas obtenir le verrou et n'ont donc aucun droit d'effectuer aucune opération. Lors de la lecture, cela dépend de la situation spécifique. Dans la plupart des cas, s'il n'y a pas besoin de données particulièrement précises ou sensibles, il n'est pas nécessaire de verrouiller, car le verrouillage prend du temps et des ressources. Il ne faut pas de temps à une seule personne pour l'appliquer. pour et maintenez le verrou. Il y a plus de problèmes. Le plus important est que si le fichier doit être mis à jour, s'il est verrouillé sur un verrou en lecture seule, l'écriture ne sera pas possible car les utilisateurs qui souhaitent écrire ne le feront pas. obtenez le verrou exclusif. Si en même temps, s'il y a trop de personnes qui demandent à détenir le verrou en lecture seule, le verrou exclusif peut ne jamais être demandé. Cela signifie que le fichier peut ne pas être écrit pendant une longue période, ce qui apparaît. être très lent. D'une manière générale, la possibilité d'écrire des fichiers est relativement rare et plus importante, donc le verrouillage exclusif est principalement effectué dans la plupart des cas. Alors, où sont utilisés les verrous en lecture seule ? Les verrous en lecture seule ne sont en réalité utiles qu'à l'utilisateur lui-même. Les verrous en lecture seule garantissent que les données lues par l'utilisateur sont les données réelles lues dans le fichier, plutôt que des données sales appelées « sales ». En fait, cela vise toujours les erreurs d'utilisation des fichiers par d'autres utilisateurs qui n'utilisent pas de verrous. Si le fichier est verrouillé, les autres utilisateurs ne doivent pas nécessairement utiliser le verrou pour lire et écrire le fichier. ils ne pourront pas accéder au fichier verrouillé. L'opération peut ne pas être valide. L'utilisateur détenant le verrou de lecture peut être sûr que lorsqu'il lit les données, ce qu'il lit provient du fichier réel et non des données qui ont été écrasées. en même temps.

Par conséquent, il devrait être une évidence d'appliquer un verrou exclusif lors de l'écriture pour garantir que les données ne se tromperont pas à ce moment-là. Si vous ne demandez pas de verrou partagé, les données lues peuvent être incorrectes, mais cela n'aura aucun impact sur le fichier lui-même. L'impact est uniquement sur l'utilisateur. Les données lues après avoir demandé un verrou partagé doivent être réelles. données dans le fichier lors de sa lecture. Si ce n'est pas pour garantir l'exactitude des données, le verrou partagé n'a pas besoin d'être ajouté. Au mieux, il sera relu. Si vous le lisez pour l'écrire, il l'est. il est préférable d'ajouter directement un verrou exclusif. Il n'est pas nécessaire d'utiliser un verrou partagé.

Un autre point à souligner est que le verrouillage des fichiers n'est efficace que pour les utilisateurs qui l'utilisent et l'utilisent conformément aux règles. Sinon, vous utilisez le vôtre et j'utilise le mien. Certains l'utilisent et d'autres non. être gâché et des erreurs se produiront toujours pour le même fichier, ce n'est que si tout le monde utilise les mêmes règles pour utiliser les verrous de fichiers que nous pouvons garantir que chaque utilisateur n'aura pas d'erreurs de lecture ou d'écriture lors du partage du fichier.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn