grazie per la tua attenzione, quindi tu dici che se il file di lock non esiste lo creo, eseguo le mie operazioni e poi lo cancello.
se invece esiste aspetto che venga cancellato.

quindi così :
codice:
while(file_exists("nomefile.lock")); // non faccio nulla fino a quando verrà cancellato

 $lockfile = fopen("nomefile.lock","w");
 fclose($lockfile);

  // eseguo le mie operazioni 

  // cancello il file di lock
 unlink("nomefile.lock");

secondo me non funge, potrebbe succedere questo :

codice:
1) inizialmente il file di lock non esiste
2) nel THREAD1 il ciclo while(file_exists("nomefile.lock"));  viene superato,
   e immediatamente dopo il thread viene sospeso
3) il THREAD2 prende il controllo, supera il ciclo while(file_exists("nomefile.lock")); 
    esegue 
    $lockfile = fopen("nomefile.lock","w");
    fclose($lockfile);
4) il thread2 viene sospeso e il thread1 riprende l'esecuzione, crea di nuovo il file
    di lock sovrascrivendolo e i due thread accedono allo stesso file in modo non
    esclusivo...

Secondo me invece potrebbe funzionare questo :

codice:
$f = fopen($nomefile,$lettura_o_scrittura);

while( !flock($f,LOCK_EX) );  // non faccio nulla finchè il lock non riesce

 // eseguo le mie operazioni

  // rilascio il file
flock($f,LOCK_UN);
$fclose($f);

è corretto?