考虑以下代码:
(let
[slave-agent (agent 0)
run-slave (fn [_] (println "running slave agent"))
run-master (fn [_]
(loop []
(println "sending to slave agent")
(send-off slave-agent run-slave)
(Thread/sleep 1000)
(recur)
)
)
master-agent (agent nil)
]
(send-off master-agent run-master)
)
使用发送/发送的任意组合,我无法让从属代理运行。 但是,当我在经典的 java.lang.Thread 中运行 run-master 时,一切正常。
有没有人有想法。
谢谢
问候
J-C
最佳答案
代理操作(或事务)中的
send
一直保持到操作(或事务)完成(并提交)为止。然而,你的运行大师永远不会回来。因此,您只是积累了实际上从未提交执行的 send-off
请求。尝试这样的事情:
(defn run-master
[_]
(send-off slave-agent run-slave)
(send-off *agent* run-master)
(Thread/sleep 1000))
关于concurrency - Clojure: Agent calling Agent: 疑似死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17231948/