Bem-vindo ao mundo do armazenamento em cache, você precisa escrever algo para um arquivo, você precisa de algo mais para acessá-lo, mas as coisas vão mal, se todos os lotes de processos de tentar escrever para o mesmo arquivo.
A solução óbvia, própria do PHP rebanho (lock file) função, pode ser usado com um simples bloco de código:
A captura com esta solução lindo é que ele na verdade não trabalho ... se você bater com várias solicitações simultâneas, então é mais que provável que vários deles vão passar o bloqueio de arquivos e gravar o arquivo.Isso acontece porque o comando rebanho é não-atômica ou seja, mais que uma instância pode funcionar ao mesmo tempo contra o mesmo arquivo. Enquanto um bando de comando está sendo executado em um processo, outro processo pode rebanho o arquivo e ambos podem completar antes do outro define o significado de bloqueio que eles ganham tanto o bloqueio de arquivos.
Para evitar isso, precisamos usar uma função atômica, sobre o único que tem PHP que é útil é ligação . Isto significa que ao invés de usar a finalidade projetada comando rebanho para o que foi projetado para, temos de cortar uma solução usando o link em vez disso, como segue:
Aqui, assumimos um arquivo existe no null / tmp /, isso pode ser apenas um arquivo vazio, e nós criamos um hard link dele para / tmp / lock.lck, dentro deste podemos verificar em seguida, abra o arquivo como normal e trabalho nele sabendo que nenhum outro processo pode estar tentando fazer a mesma coisa. A vantagem de atomicidade link é que uma vez uma chamada para ligação começa, outro vai ter que esperar antes de começar, portanto, vários processos não será capaz de passar de forma incorreta o estágio bloqueio de arquivo.
Isto significa que agora podemos bloquear nosso arquivo e usá-lo em paz!
Nenhum comentário :
Postar um comentário