2019-12-02 02:47:22 +00:00
|
|
|
(defn worker-main
|
|
|
|
[parent]
|
2019-12-02 10:39:13 +00:00
|
|
|
(def name (:receive parent))
|
|
|
|
(def interval (:receive parent))
|
2019-12-02 02:47:22 +00:00
|
|
|
(for i 0 10
|
2019-12-02 10:39:13 +00:00
|
|
|
(os/sleep interval)
|
2019-12-05 03:04:43 +00:00
|
|
|
(printf "thread %s wakeup no. %d" name i))
|
2019-12-05 04:31:01 +00:00
|
|
|
(:send parent name))
|
2019-12-02 02:47:22 +00:00
|
|
|
|
|
|
|
(defn make-worker
|
2019-12-02 10:39:13 +00:00
|
|
|
[name interval]
|
|
|
|
(-> (thread/new)
|
|
|
|
(:send worker-main)
|
|
|
|
(:send name)
|
|
|
|
(:send interval)))
|
2019-12-02 02:47:22 +00:00
|
|
|
|
2019-12-02 10:39:13 +00:00
|
|
|
(def bob (make-worker "bob" 0.2))
|
|
|
|
(def joe (make-worker "joe" 0.3))
|
2019-12-05 03:04:43 +00:00
|
|
|
(def sam (make-worker "sam" 0.5))
|
2019-12-02 02:47:22 +00:00
|
|
|
|
2019-12-02 10:39:13 +00:00
|
|
|
# Receive out of order
|
2019-12-05 04:31:01 +00:00
|
|
|
(for i 0 3
|
|
|
|
(print "worker " (thread/receive [bob sam joe]) " finished!"))
|