2011-11-14 23 views
8

Me gustaría analizar el comportamiento de un programa Clojure versus una versión de bloqueo en C. Una métrica que me gustaría rastrear es el número total de transacciones abortadas para mi programa Clojure.Contando transacciones abortadas en Clojure

El único problema es que no puedo mutar una variable fuera del contexto de la transacción que estoy en lo que estoy tratando de hacer es lo siguiente:.

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

Por supuesto, se total_aborts ¡nunca se incremente si la transacción no termina! Entonces, ¿cómo puedo hacer esto? ¡Gracias!

+0

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

Respuesta

6

Puede hacer my-num y total-abortsatoms y utilizar swap! en lugar de alter.

+0

Gracias! Había olvidado los átomos. – Timoteo