Подсчет прерванных транзакций в Clojure

Я хотел бы проанализировать поведение программы Clojure по сравнению с блокирующей версией в C. Одна метрика, которую я хотел бы отслеживать, - это общее количество прерванных транзакций для моей программы Clojure.

Единственная проблема в том, что я не могу изменить переменную вне контекста транзакции, в которой я нахожусь. Я пытаюсь сделать следующее:

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

Конечно, total_aborts никогда не будет увеличиваться, если транзакция не завершена !!! Так как я могу это сделать? Спасибо!

8
задан Timoteo 14 November 2011 в 17:06
поделиться