3
考虑下面的代码:Clojure:代理调用代理:怀疑是死锁?
(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)
)
使用Send /欢送的任意组合,我不能有从代理运行。 但是,当我运行古典java.lang.Thread中的运行主,一切工作正常。
有没有人有想法。
谢谢
问候
J-Ç
我不明白你的意思。发送使用的工作者池是无限的。因此,问题中的示例代码将正常工作,因为只有一个线程(运行run-master动作)将从'send-off'线程池中保持线程。每当我们使用'send-off'函数时,我们知道动作执行可以被阻止,这并不是不正确的或意外的行为。 – hsestupin
所以我明白Kotarak的解释是正确的?在阅读文档后,我完全不理解发送/发送的预期行为。谢谢你们的帮助! – jcmincke
@hsestupin关键是''send'不会立即发生在代理行为中。它被推迟到动作完成。当这种事情永远不会发生...那么发送永远不会发生 – kotarak