Normalmente per fare accessi concorrenti sui file si usa flock().

Questo però presenta due problemi dal mio punto di vista.
Il primo è quello noto, e cioè che su alcuni sistemi flock è implementato a livello di processo, quindi se il PHP gira in multithreading flock semplicemente non funge.

Il secondo è che, se due script contemporaneamente devono aggiornare un file con le stesse informazioni, io voglio che lo faccia uno e uno solo, non entrambi uno dopo l'altro grazie all'flock, perché fare due volte le stesse cose è inutile.

Ora, nel mio script, la scrittura sul file deve essere effettuata solo se un certo campo di un record nel database è impostato a un determinato valore.
Quindi ho pensato lo script organizzato così:
- faccio una SELECT FOR UPDATE sul record in questione (lock a livello di riga);
- se il valore nel record mi dice di aggiornare il file, lo aggiorno e poi faccio l'UPDATE per aggiornare il record, altrimenti faccio un COMMIT e chiudo la transazione.

In questo modo, suppongo, l'accesso al file dovrebbe essere sempre in mutua esclusione, gestita però dal database che fa questa cosa molto bene. Inoltre ci sarebbe una sola operazione di scrittura (la SELECT FOR UPDATE successiva troverebbe il record già aggiornato).
Suppongo anche che in questo caso non sia nemmeno necessario usare il flock(), reso inutile dal lock sul database.

Confermate le mie supposizioni?
Eventuali controindicazioni di questo metodo?