Your doc says this doesn't work with dynamic binding: (def ^:dynamic *foo* 5) (defn adder [param] (+ *foo* param)) (binding [*foo* 10] (doseq [v (pmap adder (repeat 3 5))] (println v)))
But it does since Clojure 1.3. They added binding conveyance: https://github.com/clojure/clojure/blob/master/changes.md#234-binding-conveyance This means that in Clojure 1.3+, when using dynamic binding and future, agent, pmap or core.async, child threads will inherit the bounded vars properly. You might want to make that clear in your doc. I also believe there's an issue with your library, this does not work: (definheritable foo "Main thread.") (inheritable-binding [foo "In thread inside future, running on Clojure ThreadPools."] @(future @foo)) It also doesn't seem to play nice with core.async, whereas dynamic vars do: (let [chan (async/chan)] (inheritable-binding [foo "In chan Thread."] (async/go (async/>! chan @foo)) (async/<!! chan))) => CompilerException java.lang.RuntimeException: Unable to resolve symbol: foo in this context (def ^:dynamic bar "In main thread.") (let [chan (async/chan)] (binding [bar "In chan Thread."] (async/go (async/>! chan bar)) (async/<!! chan))) => "In chan Thread." On Saturday, 29 July 2017 19:37:13 UTC-7, Jiacai Liu wrote: > > Thanks for your tips. > > I have updated my code to wrap TransmittableThreadLocal > <https://github.com/alibaba/transmittable-thread-local/blob/master/README-EN.md>, > an > enhanced version of InheritableThreadLocal, to solve threadpool problem. > > On Sunday, July 30, 2017 at 3:11:59 AM UTC+8, Didier wrote: >> >> InheritableThreadLocal is not safe to use with ThreadPools. And a lot of >> the Clojure parallel constructs rely on ThreadPools. >> >> I'd recommend you rely on dynamic Vars instead and use bound-fn when you >> want child threads to inherit parent's bindings. >> >> If you knew this already, then I see no harm in using >> InheritableThreadLocal, but just be sure you understand its risk. In most >> cases, it is unsafe. >> >> -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.