2011-04-14 2 views
1

J'utilise des refs partout dans mon code Clojure et puis j'ai réalisé que j'utilisais ref-set partout. Est-ce que cela détruit l'histoire des changements dans la STM? Ou devrais-je utiliser alter seulement et ref-set pour initialiser l'arbitre?Est-ce que les deux modifient et ref-set mettent à jour l'arborescence STM dans Clojure?

Je ne suis pas sûr si la différence est simplement syntaxique et alter finit par appeler ref-set de toute façon. Quelqu'un peut-il m'éclairer?

Répondre

4
(alter aref f arg1 ... argn) 

est essentiellement le même que

(ref-set aref (f @aref arg1 ... argn)) 

similaires pour les atomes avec reset! et swap!.

+0

Je pensais échanger! était threadsafe et réinitialisé! n'était pas, ou est-ce que je me trompe? – Zubair

+2

L'objectif de STM est de résoudre les problèmes de simultanéité, toutes les fonctions que vous avez mentionnées sont censées être thread-safe. – skuro

+0

@skuro. Ok, merci de confirmer cette réinitialisation! et échanger! sont threadsafe – Zubair

Questions connexes