Подсчет прерванных транзакций в Clojure - PullRequest
8 голосов
/ 14 ноября 2011

Я хотел бы проанализировать поведение программы 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 никогда не будет увеличен, если транзакцияне заканчивается !!!Так как я могу это сделать?Спасибо!

1 Ответ

6 голосов
/ 14 ноября 2011

Вы можете сделать my-num и total-aborts атомов и использовать swap! вместо alter.

...