-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


indietro

[20] Perché non si può fare solamente open(FH, ">file.lock")? lock, lockfile race condition

Una parte comune di codice DA NON USARE è questa:

    sleep(3) while -e "file.lock";   # PER FAVORE NON SI USI
    open(LCK, "> file.lock");        # QUESTO CODICE NON CORRETTO

Questa è una classica race condition: si impiegano due passi per fare qualcosa che deve essere fatto in uno. Questo è il motivo per cui l'hardware dei computer fornisce una istruzione atomica di test-and-set. In teoria, questo "dovrebbe" funzionare:

    sysopen(FH, "file.lock", O_WRONLY|O_EXCL|O_CREAT)
        or die "non posso aprire  file.lock: $!":

eccetto che, deplorevolmente, la creazione di file (e la cancellazione) non è atomica su NFS, dunque questo non funzionerà (non tutte le volte, almeno) in rete. Sono stati suggeriti vari schemi che coinvolgono link(), ma questi tendono a implicare del busy-wait, anch'esso poco desiderabile.

vedi in inglese

AUTORE E COPYRIGHT

Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan Torkington. Tutti i diritti riservati.

Questa documentazione è libera; puoi ridistribuirla e/o modificarla secondo gli stessi termini applicati al Perl.

Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di codice in questo file sono rilasciati al pubblico dominio. Potete, e siete incoraggiati a farlo, utilizzare il presente codice o qualunque forma derivata da esso nei vostri programmi per divertimento o per profitto. Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese ma non è obbligatorio.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google