Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defn traverse [f dat]
- (vec (map #(f %) dat)))
- (def data (traverse ref (range 10)))
- (-> (fn []
- (dosync (loop [i 0
- data data]
- (when (seq data)
- (Thread/sleep 1000)
- (println (str ">>> " i ": " @(first data)))
- (recur (+ i 1) (next data))))))
- Thread.
- .start)
- (Thread/sleep 1500)
- (dosync
- (traverse (fn [ref]
- (alter ref inc))
- data))
- (Thread/sleep 1000)
- ;; This one extra sleep forces the "main" thread sleeping for one
- ;; second. Due to some reason I don't know for now, when `dosync'
- ;; retries, the first sleep will be interrupted.
- (Thread/sleep 1000)
- (dosync
- (traverse (fn [ref]
- (alter ref inc))
- data))
- (traverse #(println (str "--- " @%)) data)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement