How To: Non-Blocking Semaphore Access in PHP Cómo: no bloqueo de acceso semáforo 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. Semáforo se utiliza para restringir el acceso a los recursos compartidos, tales como memoria compartida o limitar el número de procesos que pueden utilizar simultáneamente un recurso, en un proceso de multi-o multi-roscado medio ambiente.
In php using semaphore a process must wait while accessing a shared resource currently used by another process. En el semáforo PHP usando un proceso debe esperar al acceder a un recurso compartido actualmente utilizado por otro proceso. But this may not be required for all cases. Pero esto puede no ser necesaria para todos los casos. Sometimes we need to just verify whether a resource has been locked and move on. A veces tenemos que acaba de comprobar si un recurso ha sido bloqueada y seguir adelante. Unfortunately we have no way to check the status of a semaphore lock in php. Por desgracia no tenemos manera de comprobar el estado de un semáforo de bloqueo en php. Let’s see how we can implement non-blocking semaphore access in PHP. Veamos cómo podemos aplicar no bloquear el acceso semáforo en PHP.
As the semaphore library doesn’t give us what we need we will have to use file existence as a lock instead. Como el semáforo biblioteca no nos da lo que necesitamos tendremos que utilizar como archivo existencia de un candado en lugar. The concept and implementation is simple: El concepto y la aplicación es muy sencilla:
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. Antes de acceder a un recurso compartido usted tiene que comprobar si un pre-determinado archivo (por ejemplo. Candado) existe y archivo hora de modificación no exceda de un fijo (configurable) expira el tiempo. 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 segunda condición es necesaria para recuperarse de cerraduras antiguas que no han sido liquidados debido a la abrupta terminación del proceso anterior o por otras razones.
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 cualquiera de la condición no se cumple en el paso 1 a continuación, crear o modificar el archivo de bloqueo y el uso compartido de recursos. After you are done, you must delete the lock file to allow subsequent access of the shared resource. Una vez haya terminado, usted debe borrar el archivo de bloqueo para permitir el posterior acceso del recurso compartido. 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 supresión de debe hacerse con independencia de cualquier condición de error en las primeras etapas de excepción adecuado y el manejo de errores de etapas anteriores para evitar la terminación abrupta.
3. If both the conditions are satisfied then the resource has been locked and not available currently. Si tanto las condiciones se cumplen entonces el recurso ha sido bloqueado y no está disponible actualmente. Now you can either wait and check periodically in a loop with sleep or move on to next tasks. Ahora puede ya sea esperar y comprobar periódicamente en un bucle con el sueño o pasar a la siguiente tarea.
Let look at how we can implement this with sample code: Vamos a ver cómo podemos aplicar esto con código de ejemplo:
if(file_exists(".lock") && ((time() - filemtime(".lock")) < 1800)) { // The resource is locked.if (file_exists ( ". candado") & & ((time () - filemtime ( ". candado")) <1800)) (/ / El recurso está bloqueado.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.Puede pasar a la siguiente tareas o esperar y comprobar periódicamente en un bucle) else (@ touch ( ". Candado"); / / El uso compartido de recursos aquí / / Lo ideal sería que esto debe hacerse después de manejo de errores en los anteriores pasos, / / por lo que no causados por encima de los errores puede impedir la ejecución de este paso.@unlink(".lock"); // Release the lock }@ unlink ( ". candado"); / / Libera el bloqueo)
Filed under Filed under Headline News Headline News , PHP , Programming Programación | |
| |
RSS 2.0 RSS 2,0 | |
Trackback this Article | este artículo |
Email this Article Enviar artículo
You may also like to read También puede leer |




