如果您无法改变 AOT 编译的代码,因为这真的不是您能控制的,您可以评估一些如下所示代码,并确保它在可以从多个线程调用 `require` 之前被评估吗?当然, printable 的 println 是可选的。
(def original-require clojure.core/require)
(defn my-serialized-require [& args]
(locking clojure.lang.RT/REQUIRE_LOCK
(println "my-serialized-require acquired the lock...")
(apply original-require args)
(println "my-serialized-require releasing lock...")))
(alter-var-root #'clojure.core/require (fn [& args] my-serialized-require))
如果这也不可能,您是否可以编译 Clojure 源代码的修改版并在您的项目中使用它?如果是,您可以将 `require` 的定义修改为加锁版本。