2011-11-14 15 views
8

Vorrei analizzare il comportamento di un programma Clojure rispetto a una versione di blocco in C. Una metrica che vorrei tracciare è il numero totale di transazioni interrotte per il mio programma Clojure.Conteggio delle transazioni interrotte in Clojure

L'unico problema è che non riesco a mutare una variabile al di fuori del contesto della transazione che io sono in quello che sto cercando di fare è questo:.

(dosync 
(try 
    (alter my_num inc) 
    (catch Throwable t 
    (do 
     (alter total_aborts inc) 
     (println "Caught " (.getClass t)) 
     (throw t))))) 

Naturalmente, sarà total_aborts mai incrementato se la transazione non finisce !!! Quindi, come posso fare questo? Grazie!

+0

http://stackoverflow.com/questions/4792197/how-can-i-see-the-number-of-rollbacks-in-my-stm-in-clojure –

risposta

6

È possibile effettuare my-num e total-abortsatoms e utilizzare swap! invece di alter.

+0

Grazie! Avevo dimenticato gli atomi. – Timoteo

Problemi correlati