salve, mi servirebbe una illuminazione riguardo la gestione dell'atomicità durante una procedura di caching
lo script realizzato fin ora per determinare se fare il cache o no è questo :
ed è sulla ultima riga il problema : per il discorso atomicità questo script non funziona.codice:<? // controlla se c'è da fare o no il cache, main_check è 0 se è necessario farlo $update=mysql_query("UPDATE forum SET main_check='1' WHERE main_check='0'",$mydb); // se ha modificato il record (in maniera atomica nel db) il primo utente che arriva crea file di cache, gli altri saltano questo if e lo includeranno semplicemente if(mysql_affected_rows()!=0) { ob_start(); // creo la pagina che andrà inclusa successivamente $query=mysql_query("SELECT c_check, c_id FROM categories",$mydb); while ($row = mysql_fetch_array($query, MYSQL_NUM)) { ?> Category <?=$row[1]?> <? } $cachefile="./cache/list.php"; $fp=fopen($cachefile, 'w'); fwrite($fp, ob_get_contents()); fclose($fp); ob_end_clean(); } // includo la pagina (appena creata, oppure se non ha aggiornato nulla quella che già c'era include("./cache/list.php"); ?>
se per caso uno stà leggendo il file nella cartella cache, ma nel frattempo qualcuno modifica qualcosa e un ulteriore utente si collega alla pagina, rischio di far leggere a uno il file mentre l'altro lo stà scrivendo. stessa cosa se prima uno inizia a scrivere il file e un altro, evitando il primo if, inizia a leggere quel file.
l'unico modo che mi è venuto in mente è utilizzare i semafori, ma da quanto ne sò (forse poco) su php non sono il massimo.
qualcuno ha qualche soluzione magari migliore?![]()
cordiali saluti


Rispondi quotando