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 :
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");
?>
ed è sulla ultima riga il problema : per il discorso atomicità questo script non funziona.
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