如何在 Clojure 中查看我的 STM 中的回滚次数?
问问题
465 次
3 回答
18
你不能……除非你愿意作弊:
(defmacro spy-dosync [& body]
`(let [retries# (atom -1)
result# (dosync
(swap! retries# inc)
~@body)]
(println "retries count:" @retries#)
result#))
然后用 spy-dosync 替换你的 dosync。
于 2011-01-25T11:16:19.287 回答
5
如果你感觉很活泼,你可以破解 Clojure 源代码并重建(重建 Clojure 源代码很容易)。事务重试发生在 src/jvm/clojure/lang/LockingTransaction.java 的 run() 方法中。那里有一个很大的 for 循环,直到完成或 RETRY_LIMIT。循环退出时 i 的值应该是重试次数。
于 2011-01-25T15:02:04.827 回答
2
Chris Houser 编写的STM 压力测试可能很有用
于 2011-01-26T16:21:55.167 回答