-
Mutex in php???
Salve a tutti.
Ho il seguente problema.
Ho una pagina web il cui contenuto viene caricato da un file.
Qualsiasi utente puo' modificare e salvare tale file. Il problema chiaramente si verifica nel momento in cui due utenti distinti decidono di modificare il file contemporaneamente.
Di conseguenza vorrei fare in modo che l'accesso al file sia mutuamente esclusivo (ovvero puo' modificare al file solo una persona alla volta). Se un altro utente prova a modificarlo in quello stesso istante, gli verra' restituito un messaggio del tipo "Prova piu' tardi".
Grazie.
Ciao Ciao!! :lol:
-
potresti scrivere in un file-database 0 se non c'è nessuno che modifica, ed 1 se qualcuno modifica, il tuo script deve controllare se c'è 1 o 0 e poi si comporta a seconda dei casi.
ciao ciao
P.S. può darsi anche che ci sia un'altro modo ma io conosco solo questo...
-
una regione critica fatta con un semaforo:
qualcuno ha aperto il file e lo sta modificando:
creo un file .lock e lo lascio li finchè quello che ha aperto il file non lo chiude (quando lo chiude elimini il file .lock)
prima di entrare in regione critica verifico se il semaforo è rosso (file .lock esistente) e se lo è do un messaggio d'errore e dico di riprovare più tardi (qualcuno sta già smanettando sul file)...
se vuoi farla più raffinata puoi fare qualcosa che tenti di implementare un semaforo numerico con una coda dove la gente si può mettere in lista...
ovviamente procedendo in quel modo rischi lo stallo: un utente non chiude il file e tutti gli altri aspettano a tempo indeterminato...
qualcosa di già pronto lo trovi con la funzione flock:
http://www.php.net/flock
;)
-
...bruciato sul tempo...
Esisterebbe per file questo
http://it.php.net/manual/it/function.flock.php
flock
Ma a suo tempo mi pare di aver provato, e non era supportato da AV, ma mi potrei sbagliare.
Soper certo che non funzionavano i lock al DB, ma questa è un'altra storia.
Quella che propone domenico non ha molto senso dato che ci sarebbe lo stesso problema in accesso al file-database da modificare a 1 o 0.
Per questo genere di cose c'è assolutamente bisogno di una funzione del sistema.
-
sai la cosa strana? che sono ritornato qui perchè l'ho capito anche io, un po' tardi :tongue