Pregunta

¿Cómo puedo ver el número de reversiones en mi STM en Clojure?

¿Fue útil?

Solución

No puedes ... a menos que estés dispuesto a hacer trampa:

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

y luego reemplace su dosync por un spy-dosync.

Otros consejos

Si te sientes juguetón, podrías hackear la fuente de Clojure y reconstruir (es fácil para reconstruir la fuente de Clojure). Los requisitos de transacción ocurren en SRC/JVM/Clojure/Lang/LockingTransaction.java en el método run (). Hay un gran bucle allí que va hasta que termine o vuelva a roy_limit. El valor de I cuando sale el bucle debe ser el recuento de reintentos.

Hay stm-stress prueba Escrito por Chris Houser, que podría ser útil

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top