Pour la simultanéité et la garantie de l'intégrité des données, comment obtiendriez-vous un verrou d'exclusion mutuelle pour un objet donné? Auriez-vous besoin d'utiliser le verrouillage dans la base de données, ou un fichier, ou est-ce que PHP supporte quelque chose comme ça?Quel est l'équivalent de l'instruction de verrouillage C# en PHP?
Répondre
PHP ne supporte pas multithreading donc il n'y a pas de mécanisme de verrouillage pour les objets. Si vous voulez verrouiller un fichier, vous pouvez utiliser flock pour cela. Il n'est pas nécessaire de verrouiller la base de données car les moteurs de base de données peuvent généralement gérer plusieurs connexions.
Nare à l'esprit PHP n'est pas multithread, il est donc peu probable que vous ayez besoin de quelque chose comme ça ... cependant, cela peut être nécessaire si vous utilisez de la mémoire partagée ou toute autre ressource externe. Dans ce cas, utilisez smaphores:
http://www.php.net/manual/en/function.sem-acquire.php
flock pour les fichiers.
Si vous souhaitez utiliser le verrouillage dans la base de données, vous devez utiliser les fonctions de verrouillage pour ces bases de données. Presque toutes les bases de données utilisent une forme de mécanisme de verrouillage.
rien pour les objets
Il a les sémaphores
Il a troupeau http://www.php.net/manual/en/function.flock.php
Vous pouvez faire le verrouillage de table MySQL.
Comme d'autres ont répondu, puisque PHP n'est pas multithread, vous n'avez pas besoin de verrouiller les objets. Cependant, si vous avez besoin de verrouiller la base de données, vous pouvez vous tourner vers transactions. Il existe de nombreux tutoriels pour faire des transactions avec PHP et MySQL (et probablement aussi pour d'autres RMDBS).
Je ne parle pas seulement de "connexions multiples", mais de circonstances dans lesquelles vous devez vous assurer que personne d'autre ne modifie une donnée donnée en même temps. Par exemple, si vous avez une application ATM. Si deux personnes retirent 50 $ en même temps, mais qu'il n'y a que 50 $ dans le compte, l'une des personnes devrait avoir une erreur. –
OK, je vois, puisque ce n'est pas multi-threadé, je suppose que cela ne devrait pas poser de problème ... –