如何在Clojure中查看STM中的回滚次数?

时间:2011-01-25 10:12:37

标签: clojure

如何在Clojure中查看STM中的回滚次数?

3 个答案:

答案 0 :(得分:17)

你不能......除非你愿意作弊:

(defmacro spy-dosync [& body]
  `(let [retries# (atom -1)
         result# (dosync
                   (swap! retries# inc)
                   ~@body)]
     (println "retries count:" @retries#)
     result#))

然后用spy-dosync替换你的dosync。

答案 1 :(得分:5)

如果你感觉活泼,你可以破解Clojure源并重建(重建Clojure源easy)。事务重试发生在run()方法中的src / jvm / clojure / lang / LockingTransaction.java中。那里有一个很大的for循环,直到完成或RETRY_LIMIT。循环退出时i的值应为重试计数。

答案 2 :(得分:2)

Chris Houser写的STM-stress test可能很有用