2011-01-25 2 views

답변

17

당신은 할 수 없습니다 ... 당신은 부정 행위를 기꺼이하지 않는 :

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

을 다음 스파이 dosync하여 dosync를 교체하십시오.

5

기분이 좋으면 Clojure 소스를 해킹하여 다시 빌드 할 수 있습니다 (Clojure 소스를 다시 작성하려면 easy입니다). 트랜잭션 재 시도는 run() 메소드의 src/jvm/clojure/lang/LockingTransaction.java에서 발생합니다. 완료 될 때까지 또는 RETRY_LIMIT까지 반복되는 커다란 루프가 있습니다. 루프가 종료 될 때 i의 값은 재시도 횟수이어야합니다.

2

Chris Houser가 작성한 STM 스트레스 test이 유용 할 수 있습니다.

관련 문제