Thread Perl einen sicheren Counter erstellen (24 answers)
Opened by Johannes_Schuller at 2012-06-06 10:27

GUIfreund
 2012-06-07 12:06
#158828 #158828
User since
2011-08-08
559 Artikel
BenutzerIn
[default_avatar]
2012-06-06T15:56:36 pq
ein beispiel mit eval und signal-handler steht ja auch in perldoc -f alarm

Dieses Beispiel verwendet sysread statt flock. Das dürfte kein prinzipieller Unterschied sein. Wichtiger scheint mir jedoch:

Das Kamelbuch hat unmittelbar hinter dem Eval-Block die zusätzliche Zeile
Code (perl): (dl )
alarm 0;   # Schutz vor Race Condition

Als Begründung heißt es
Quote
Das zweite alarm 0 ist für den Fall vorgesehen, dass das Signal nach der Ausführung von flock, aber vor dem ersten alarm 0 eintrifft. Ohne den zweiten alarm 0 würden Sie eine kleine Race Condition riskieren - aber die Größe spielt bei Race Conditions keine Rolle, sie existieren oder sie existieren nicht.

Es kann natürlich sein, dass das Kamelbuch inzwischen in diesem Punkt veraltet ist.

perldoc -f alarm verweist in diesem Zusammenhang gleich 2 mal auf perldoc -f alarm
Quote
Using eval/die always works, modulo the caveats given in Signals in the perlipc manpage.
.....
For more information see the perlipc manpage.

Der dortige Absatz Long-running opcodes im Abschnitt Deferred Signals (Safe Signals) klingt mir nicht sehr ermutigend.
Gruß
GUIfreund

View full thread Perl einen sicheren Counter erstellen