Basierend auf der Eingabe über die Kommandozeile muss ich einige Laufzeit-Konstanten setzen, die eine Anzahl von Downstream-Funktionen verwenden wird. Der Code in diesen Funktionen kann in anderen Threads ausgeführt werden, sodass ich die Kombination "declare var und use binding macro" nicht in Betracht ziehe. Was sind die Vor-und Nachteile der Verwendung einer Var (mit alter-var-root) dafür im Vergleich zu einem Atom? Das heißt,
%Vor%versus
%Vor%Wenn es neben diesen beiden eine andere Option gibt, die ich berücksichtigen sollte, würde ich es gerne wissen.
Im Idealfall hätte ich dem Atom auch kein Initialwert gegeben, weil ich an anderer Stelle (mit dem CLI-Aufruf) Standardwerte setzen möchte, aber ich kann damit leben, besonders wenn die Verwendung des Atoms Vorteile im Vergleich zu bietet die Alternative (n).
AFAIK alter-var-root
garantiert nur die Änderung von synchronisierten Variablenwerten und garantiert kein sicheres Lesen während dieser Änderung. Auf der anderen Seite bietet atom
wirklich eine atomare Änderung des Identitätsstatus.
Wenn Sie keinen Anfangswert angeben möchten, können Sie ihn einfach auf nil
:
Was ist falsch daran, nur eine Variable und alter-var-root
zu verwenden? Sie legen den neuen Wert in Ihrer Startfunktion fest, bevor Sie die Worker wirklich starten. Es gibt also kein Rennen im Lesen. Und Sie können @
überall dort speichern, wo Sie den Wert benötigen.
Tags und Links clojure