How To: Non-Blocking Semaphore Access in PHP Comment: non-sémaphore de blocage d'accès en PHP
Semaphore is used to restrict access to shared resources, such as shared memory or to limit the number of processes that may simultaneously use a resource, in a multi-process or multi-threaded environment. Sémaphore est utilisé pour restreindre l'accès à des ressources partagées, telles que la mémoire partagée ou à en limiter le nombre de processus qui mai utiliser simultanément une ressource, dans un environnement multi-processus ou multi-environnement.
In php using semaphore a process must wait while accessing a shared resource currently used by another process. Dans le php sémaphore en utilisant un processus doit attendre tout en ayant accès à une ressource partagée actuellement utilisé par un autre processus. But this may not be required for all cases. Mais cette mai ne sera pas exigée dans tous les cas. Sometimes we need to just verify whether a resource has been locked and move on. Parfois, nous devons seulement vérifier si la ressource a été verrouillé et aller de l'avant. Unfortunately we have no way to check the status of a semaphore lock in php. Malheureusement, nous n'avons aucun moyen de vérifier l'état d'un sémaphore de verrouillage en PHP. Let’s see how we can implement non-blocking semaphore access in PHP. Voyons comment nous pouvons mettre en place non bloquant l'accès sémaphore en PHP.
As the semaphore library doesn’t give us what we need we will have to use file existence as a lock instead. Comme le sémaphore bibliothèque ne nous donne pas ce dont nous avons besoin, nous aurons à utiliser le fichier existence comme un verrou au lieu. The concept and implementation is simple: Le concept et la mise en œuvre est simple:
1. Before accessing a shared resource you have to check whether a pre-determined file (say .lock ) exists and file modification time doesn’t exceed a fixed (configurable) expire time. Avant d'accéder à une ressource partagée, vous devez vérifier si une pré-déterminé fichier (par exemple. Écluse) existe de modification de fichier et le temps ne dépasse pas un fixe (configurable) viennent à échéance du temps. The second condition is required to recover from old locks which haven’t been cleared due to abrupt termination of the previous process or other reasons. La deuxième condition est nécessaire pour récupérer d'anciennes écluses qui ne l'ont pas été autorisé en raison de la cessation brutale de l'ancien processus ou d'autres raisons.
2. If either of the condition is not satisfied in step 1 then create or modify the lock file and use the shared resource. Si l'une des conditions n'est pas remplie dans l'étape 1, puis créer ou modifier le fichier de verrouillage et d'utiliser la ressource partagée. After you are done, you must delete the lock file to allow subsequent access of the shared resource. Lorsque vous aurez terminé, vous devez supprimer le fichier de verrouillage pour permettre l'accès ultérieur de la ressource partagée. The deleting must be done irrespective of any error condition in earlier stages by proper exception / error handling of earlier steps to prevent abrupt termination. La suppression doit se faire indépendamment de toute condition d'erreur au début par une exception / erreur de manipulation plus tôt des mesures pour prévenir la résiliation abrupte.
3. If both the conditions are satisfied then the resource has been locked and not available currently. Si les deux conditions sont remplies alors la ressource a été bloquée et pas disponible actuellement. Now you can either wait and check periodically in a loop with sleep or move on to next tasks. Maintenant, vous pouvez soit attendre et vérifier périodiquement dans une boucle avec le sommeil ou la passer à la prochaine mission.
Let look at how we can implement this with sample code: Je regarde comment nous pouvons appliquer cela avec des exemples de code:
if(file_exists(".lock") && ((time() - filemtime(".lock")) < 1800)) { // The resource is locked.if (file_exists ( ". lock") & & ((time () - filemtime ( ". lock")) <1800)) (/ / La ressource est verrouillé.You can either move on to next tasks or wait and check periodically in a loop } else { @touch(".lock"); // Use shared resource here // Ideally this should be done after error handling in previous steps, // so no errors caused above can prevent execution of this step.Vous pouvez soit passer à la prochaine tâches ou d'attendre et de vérifier périodiquement dans une boucle) else (@ touch ( ". Lock") / / utilisation des ressources partagées ici / / Idéalement, cela devrait être fait après le traitement des erreurs dans les étapes précédentes, / / de sorte qu'aucune erreurs causées ci-dessus peuvent empêcher l'exécution de cette étape.@unlink(".lock"); // Release the lock }@ unlink ( ". lock") / / sortie de l'écluse)
Filed under Classé sous Headline News Headline News , PHP , Programming Programmation | |
| |
RSS 2.0 RSS 2,0 | |
Trackback this Article | cet article |
Email this Article Envoyer cet article
You may also like to read Vous mai également à lire |



