Por que o bando não limpa o arquivo de trava? [fechadas]

4

Depois que o processo é concluído, vejo que o arquivo de bloqueio não foi excluído? Existe alguma razão por que flock mantém o arquivo? Além disso, como o flock sabe se existe um bloqueio adquirido?

Aqui está o exemplo de um arquivo crontab

* * * * * flock python <script_name>.py
    
por wayfare 30.05.2017 / 19:54

1 resposta

8

Para a maioria dos casos de uso de flock , é muito importante que o arquivo de bloqueio não seja "limpo". Caso contrário, imagine este cenário:

  • o processo A abre o arquivo de bloqueio, descobre que ele não existe e, por isso, o cria.
  • processo A adquire o bloqueio
  • o processo B abre o bloqueio (encontra já existe)
  • o processo B tenta adquirir o bloqueio mas tem que esperar
  • processo A libera o bloqueio
  • o processo B adquire o bloqueio instantaneamente
  • processo A exclui o arquivo de bloqueio
  • o processo C abre o arquivo de bloqueio, descobre que ele não existe e cria um novo. Observe que agora ele está mantendo aberto um arquivo de bloqueio diferente que aquele que o processo B bloqueou.
  • o processo C tenta adquirir o bloqueio e é bem-sucedido ... mas deve ter que esperar, porque o processo B ainda tem [uma encarnação anterior de] o arquivo de bloqueio aberto e bloqueado.
por 30.05.2017 / 20:35

Tags