Skip to content

Instantly share code, notes, and snippets.

@AfonsoTsukamoto
Last active July 27, 2016 14:14
Show Gist options
  • Save AfonsoTsukamoto/94bf2e0a0cc406bc459e5e11bcc4e45e to your computer and use it in GitHub Desktop.
Save AfonsoTsukamoto/94bf2e0a0cc406bc459e5e11bcc4e45e to your computer and use it in GitHub Desktop.
(def queue-size 30)
(defn make-object []
(.. some object ..))
(defn build-queue [_]
(let [block-queue (LinkedBlockingQueue. (int queue-size))]
(do
(repeat queue-size (.put block-queue (make-object)))
block-queue)))
(def queue (atom build-queue))
(defn take-one []
(.take @queue))
(defn put-back [ob]
(.put @queue ob))
(defmacro with-shared-object
[object & body]
`(let [~object (take-one)]
(try
(let [res# ~@body]
(put-back ~object)
res#)
(catch Throwable e#
(put-back ~object)
(throw e#)))))
;; Usage
(with-shared-object object
(some-operation object))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment