1
0
Fork 0
mirror of synced 2024-07-02 21:41:09 -04:00
ultimate-vim/sources_non_forked/slimv/swank-clojure/swank/util/concurrent/mbox.clj
2022-06-05 18:14:25 +08:00

32 lines
733 B
Clojure

(ns swank.util.concurrent.mbox
(:refer-clojure :exclude [send get]))
;; Holds references to the mailboxes (message queues)
(defonce mailboxes (ref {}))
(defn get
"Returns the mailbox for a given id. Creates one if one does not
already exist."
([id]
(dosync
(when-not (@mailboxes id)
(alter mailboxes assoc
id (java.util.concurrent.LinkedBlockingQueue.))))
(@mailboxes id))
{:tag java.util.concurrent.LinkedBlockingQueue})
(defn send
"Sends a message to a given id."
([id message]
(let [mbox (get id)]
(.put mbox message))))
(defn receive
"Blocking recieve for messages for the given id."
([id]
(let [mb (get id)]
(.take mb))))
(defn clean []
)