如何在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的值应该是重试计数。