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?

Rispondi quotando