2011-01-25 9 views

risposta

17

Non è possibile ... a meno che non si è disposti a barare:

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

e quindi sostituire il vostro dosync da una spia-dosync.

5

Se ti senti vivace, puoi hackerare il sorgente Clojure e ricostruire (è easy ricostruire il sorgente Clojure). I tentativi di transazione si verificano in src/jvm/clojure/lang/LockingTransaction.java nel metodo run(). C'è un grande ciclo per lì che va fino al completamento o RETRY_LIMIT. Il valore di i quando il ciclo termina dovrebbe essere il numero di tentativi.

2

C'è STM stress test scritto da Chris Houser che potrebbe essere utile

Problemi correlati