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

问题描述:

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

你不能......除非你愿意骗:

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

,然后由间谍dosync取代你dosync。

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

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