13

ClojureのSTMでのロールバックの数を確認するにはどうすればよいですか?

4

3 に答える 3

18

カンニングをする気がなければ...できません:

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

次に、dosyncをspy-dosyncに置き換えます。

于 2011-01-25T11:16:19.287 に答える
5

気が狂っている場合は、Clojureソースをハックして再構築できます(Clojureソースを再構築するのは簡単です)。トランザクションの再試行は、run()メソッドのsrc / jvm / clojure / lang/LockingTransaction.javaで発生します。完了またはRETRY_LIMITまで続く大きなforループがあります。ループが終了するときのiの値は、再試行回数である必要があります。

于 2011-01-25T15:02:04.827 に答える
2

クリスハウザーによって書かれたSTMストレステストがあり、これは役に立つかもしれません

于 2011-01-26T16:21:55.167 に答える