在 cljs.analyzer/load-core 中存在竞态条件。
`
?(:clj
(defn load-core []
(when (not @-cljs-macros-loaded)
(reset! -cljs-macros-loaded true)
(if *cljs-macros-is-classpath*
(locking load-mutex
(load *cljs-macros-path*))
(locking load-mutex
(load-file *cljs-macros-path*))))
(intern-macros 'cljs.core)))
`
当两个或多个具有独立 * } 绑定的线程同时调用 {{load-core}} 时,只有一个将触发实际的加载,其他线程将直接跳转到 {{intern-macros}} 并开始将其宏编译到其编译环境中。由于第一个线程的加载可能尚未完成加载实际的 cljs.core 宏,第二个线程在其编译环境中将有一个不完整的宏集。
相关: https://dev.clojure.org/jira/browse/CLJS-1963