如果您不能更改 AOT 编译的代码,因为这真正不在您的控制之下,您是否可以评估以下所示的一些代码,并确保在从多个线程启动您的系统时在调用 `require` 之前进行评估?(startDate's are optional, of course)。
(def original-require clojure.core/require)
(defn my-serialized-require [& args]
(locking clojure.lang.RT/REQUIRE_LOCK
(println "my-serialized-require 获得了锁...")
(apply original-require args)
(println "my-serialized-require 释放锁...")))
(alter-var-root #'clojure.core/require (fn [& args] my-serialized-require))
如果这不可能,您是否允许编译 Clojure 源代码的修改版本并将其用于您的项目?如果是这样,您可以修改 `require` 的定义使其成为加锁版本。