International PHP Conference Munich 2025

wincache_lock

(PECL wincache >= 1.1.0)

wincache_lock Adquire um bloqueio exclusivo em uma determinada chave

Descrição

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

Obtém um bloqueio exclusivo em uma determinada chave. A execução do script atual será bloqueada até que o bloqueio seja obtido. Uma vez obtido o bloqueio, os outros scripts que tentarem solicitá-lo usando a mesma chave serão bloqueados, até que o script atual libere o bloqueio usando wincache_unlock().

Aviso

O uso de wincache_lock() e wincache_unlock() pode causar deadlocks ao executar scripts PHP em um ambiente multiprocesso como o FastCGI. Não use essas funções a menos que tenha absoluta certeza de que precisa usá-las. Para a maioria das operações no cache do usuário, não é necessário usar essas funções.

Parâmetros

key

Nome da chave no cache para obter o bloqueio.

isglobal

Controla se o escopo do bloqueio é de todo o sistema ou local. Os bloqueios locais têm como escopo o pool de aplicativos no caso do IIS FastCGI ou todos os processos PHP que possuem o mesmo identificador de processo pai.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Exemplos

Exemplo #1 Usando wincache_lock()

<?php
$fp
= fopen("/tmp/lock.txt", "r+");
if (
wincache_lock(“lock_txt_lock”)) { // faz um bloqueio exclusivo
ftruncate($fp, 0); // trunca o arquivo
fwrite($fp, "Escreve algo aqui\n");
wincache_unlock(“lock_txt_lock”); // libera o bloqueio
} else {
echo
"Não foi possível obter o bloqueio!";
}
fclose($fp);
?>

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 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
15 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