dici che dal database questo problema non si pone?
Un server database come MySQL è nato per supportare accessi concorrenti, oltretutto scriveresti in modo sequenziale nella tabelle e potresti sempre leggere i dati con un ORDER BY.

Una cosa tipo:

while(!flock($file, LOCK_EX)) {}

Eventualmente con un usleep() ed un controllo delle esecuzioni per evitare un ciclo infinito.