PHP Conference Nagoya 2025

wincache_lock

(PECL wincache >= 1.1.0)

wincache_lock Obtiene un bloqueo exclusivo en una clave dada

Descripción

wincache_lock(string $key, bool $isglobal = false): bool

Obtiene un bloqueo exclusivo sobre una clave dada. La ejecución del script actual quedará en espera que se pueda obtener el bloqueo. Una vez obtenido el bloqueo, el otro script que intente solicitar dicho bloqueo utilizando la misma clave quedará en espera, hasta que el script actual libere el bloqueo con wincache_unlock().

Advertencia

El uso de wincache_lock() y wincache_unlock() puede causar bloqueos de punto muerto al ejecutar scripts de PHP en un entorno multiproceso como FastCGI. No emplear estas funciones a menos que se esté absolutamente seguro de que son necesarias. Para la mayoría de las operaciones en la caché de usuario no es necesario usar esar estas funciones.

Parámetros

key

Nombre de la clave en la cahcé para adquirir el bloqueo.

isglobal

Controla si el ámbito del bloqueo es a nivel de sistema o local. Los bloqueos locales tienen alcance para la «pool» de la aplicación en el caso de FastCGI de IIS o a todos los procesos de php que tengan el mismo identificador de proceso padre.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Ejemplos

Ejemplo #1 Empleo de wincache_lock()

<?php
$fp
= fopen("/tmp/lock.txt", "r+");
if (
wincache_lock(“lock_txt_lock”)) { // realizar un bloqueo exclusivo
ftruncate($fp, 0); // truncate file
fwrite($fp, "Write something here\n");
wincache_unlock(“lock_txt_lock”); // liberar el bloqueo
} else {
echo
"No se pudo obtener el bloqueo";
}
fclose($fp);
?>

Ver también

add a note

User Contributed Notes 2 notes

up
1
PrisonDoom
5 years ago
The external link was off and the backslash "\" most of time are used for "scape character". Anyway, regards.
up
-1
donraman at microsoft dot com
14 years ago
User should be aware that character '\' is not allowed as part of lock name. The reason why backslash is not allowed is because we are using CreateMutex call as described at http://msdn.microsoft.com/en-us/library/ms682411(VS.85).aspx. As per this article third parameter cannot have '\' character which is the lock name.

This means below code will not work.

<?php

$ret_val
= wincache_lock("C:\WINDOWS\Temp/cache");
echo
$ret_val . '<br>';
$ret_val = wincache_unlock("C:\WINDOWS\Temp/cache");
echo
$ret_val . '<br>';

?>
To Top