volevo fare un ipotesi, sicuramente stupida.
Tu stai usando dei file e quindi mi sembra cmq anomalo appoggiarsi a un DB per sostenere questa pecca di flock che nn funge mai. A quel punto verrebbe spontaneo dirti usa sempre il database ; ma sicuramente avrai i tuoi motivi per utilizzare i file.
Allora chiedo : e se usassi ciò che fai sul database mediante un file di testo ?
Ovvero metti un file lock.txt nel quale ogni volta che si accede a un file lo si mette li dentro (il nome ad esempio) e si verifica se lo si sta usando(immaginando di inserirlo in quesot file quando si accede e non è presente in lock.txt)...e il discorso prosegue come il tuo su db.