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

有帮助吗?

解决方案

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

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

然后用间谍dosync替换您的dosync。

其他提示

如果您感到烦躁,您可以入侵Clojure的来源和重建 简单的 重建Clojure源)。事务重试发生在run()方法中的src/jvm/clojure/lang/lockingtransaction.java中。那里有一个很大的循环,直到完成或retry_limit。循环退出应为重试计数时的I值。

有STM压力 测试 由克里斯·豪斯(Chris Houser)撰写,这可能很有用

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top