Last active
July 27, 2016 14:14
-
-
Save AfonsoTsukamoto/94bf2e0a0cc406bc459e5e11bcc4e45e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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