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

Zub*_*air 13 clojure stm

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

cgr*_*and 18

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

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

然后用间谍dosync替换你的dosync.


Ale*_*ler 5

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