Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (ns clbg.clojure.threading)
- (def token 1000)
- (def ring-size 503)
- (def ring (repeat ring-size (agent nil)))
- (defn init-ring [ring]
- (aset ring (dec ring-size) (agent 0))
- (loop [i 0
- stop (dec ring-size)]
- (when (< i stop)
- (aset ring i (agent (inc i)))
- (recur (inc i) stop))))
- (defn pass-token [recipient token]
- (if (= token 0)
- (do
- (println recipient)
- (shutdown-agents))
- (let [next-agent (agent ring recipient)]
- (send next-agent pass-token (dec token))
- recipient)))
- (defn start [token]
- (init-ring ring)
- (send (agent ring 0) pass-token token))
- (time (start token))
Add Comment
Please, Sign In to add comment