¿Cómo puedo ver el número de reversiones en mi STM en Clojure?
Pregunta
¿Cómo puedo ver el número de reversiones en mi STM en Clojure?
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