Při T5-T7 je problém při zápisu do souboru fwrite, fflush. To jsem už psal.
Zamknuté to je. Stručně:
$locked = flock($fp, LOCK_SH);
$s = fread($fp, $fsize );
$success = flock($fp, LOCK_UN);
$success = fclose($fp);
$fp = fopen($tname, "w");
$locked = flock($fp, LOCK_EX);
$success = fwrite($fp, $s);
$success = fflush($fp);
$success = flock($fp, LOCK_UN);
$success = fclose($fp);
Ale teď se dívám, že jsem tam mohl dát LOCK_EX místo LOCK_SH, to LOCK_SH tam nedává smysl. Ale má to vliv?
$locked = flock($fp, LOCK_SH)
OK, tak jsem to testnul a řekněte mi jestli ten kód je dobře:
function atomicFuse($n, $c, $disableDelay = false){
$start = false;
if ( @mkdir("$n.t") )
$start = true;
if ( !$disableDelay ){
if ( $start == false )
{
$n = $n*30;
...
V té funkci je $start = true když je povoleno provádět atomicitní operaci jinak je false.
Výsledek:
FF1 - failed 0x
Chrome - failed 0x
FF2 - failed 2x
Opera - failed 5x
Celkem atomicity failed 7x - což ale nutně neznamená, že je to lepší. Někdy může být selhání více, někdy méně, jak tu bylo řečeno, tohle závisí na OS, který proces si zrovna upřednostní. Závěr ale je, že k porušení atomicity došlo.