Skip to content

Instantly share code, notes, and snippets.

@rubber-duck
Created November 22, 2011 21:02
Show Gist options
  • Save rubber-duck/1386951 to your computer and use it in GitHub Desktop.
Save rubber-duck/1386951 to your computer and use it in GitHub Desktop.
=> (defmacro locking-read
"Utility to lock a readLock from the read-write lock provided and put body part in a try expression body where
finally unlocks the lock."
[rwlock & body]
`(let [readlock (.readLock ~rwlock)]
(.lock readlock)
(try
(do ~body)
(finally (.unlock rwlock)))))
=> (macroexpand-1 '(locking-read nil (println "foo")))
(clojure.core/let [clojure.observable.internal/readlock (.readLock nil)] (.lock clojure.observable.internal/readlock) (try (do ((println "foo"))) (finally (.unlock clojure.observable.internal/rwlock))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment