在Clojure中计算中止的事务

时间:2011-11-14 17:06:39

标签: transactions clojure functional-programming

我想分析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 个答案:

答案 0 :(得分:6)

您可以my-numtotal-aborts atoms并使用swap!代替alter