如果您不能改变那个 AOT 编译的代码,因为它真正不在您的控制之下,那么您能控制评估以下代码,并确保它在多个线程从系统启动时调用 `require` 之前得到评估吗?当然,`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` 的定义,使其为锁定的版本。