如果你无法更改那个AOT编译的代码,因为这确实不在你的控制之下,你能否评价以下代码,并确保它在从多个线程调用`require`之前在系统启动时被评价?当然,println是可选的。
(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`的定义,使其变为带有锁的版本。