2011-11-14 20 views
8

Tôi muốn phân tích hành vi của chương trình Clojure so với phiên bản khóa trong C. Một số liệu tôi muốn theo dõi là tổng số giao dịch bị hủy bỏ cho chương trình Clojure của tôi.Đếm các giao dịch bị hủy trong Clojure

Vấn đề duy nhất là tôi không thể đột biến một biến bên ngoài bối cảnh của giao dịch mà tôi đang ở Những gì tôi đang cố gắng để làm điều này là:.

(dosync 
(try 
    (alter my_num inc) 
    (catch Throwable t 
    (do 
     (alter total_aborts inc) 
     (println "Caught " (.getClass t)) 
     (throw t))))) 

Tất nhiên, total_aborts sẽ không bao giờ được tăng lên nếu giao dịch không kết thúc !!! Vì vậy, làm thế nào tôi có thể làm điều này? Cảm ơn!

+0

http://stackoverflow.com/questions/4792197/how-can-i-see-the-number-of-rollbacks-in-my-stm-in-clojure –

Trả lời

6

Bạn có thể tạo my-numtotal-abortsatoms và sử dụng swap! thay vì alter.

+0

Cảm ơn! Tôi đã quên về nguyên tử. – Timoteo

Các vấn đề liên quan