Guest User

Untitled

a guest
Jun 19th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.75 KB | None | 0 0
  1. (ns clbg.clojure.threading)
  2.  
  3. (def token 1000)
  4. (def ring-size 503)
  5. (def ring (repeat ring-size (agent nil)))
  6.  
  7. (defn init-ring [ring]
  8. (aset ring (dec ring-size) (agent 0))
  9. (loop [i 0
  10. stop (dec ring-size)]
  11. (when (< i stop)
  12. (aset ring i (agent (inc i)))
  13. (recur (inc i) stop))))
  14.  
  15. (defn pass-token [recipient token]
  16. (if (= token 0)
  17. (do
  18. (println recipient)
  19. (shutdown-agents))
  20. (let [next-agent (agent ring recipient)]
  21. (send next-agent pass-token (dec token))
  22. recipient)))
  23.  
  24. (defn start [token]
  25. (init-ring ring)
  26. (send (agent ring 0) pass-token token))
  27.  
  28. (time (start token))
Add Comment
Please, Sign In to add comment