concurrency - Clojure: Agent calling Agent: 疑似死锁?

标签 concurrency clojure deadlock agent

考虑以下代码:

(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/

相关文章:

java - Sun 对 Clojure 的态度如何?

java - 如何在 Clojure 中代理具有重载方法的 Java 类?

python - python单车道桥实现中的死锁

java - Java 中命名管道的并发读/写(在 Windows 上)

java - 能见度保证

clojure - 如何在同一服务器上运行多个 Ring 应用程序?

c# - 多个并发请求之间的 token 共享 C#

entity-framework - 可以在 Entity Framework 中设置死锁优先级吗?

database - 数据库+结果集并发的最佳实践(UI 和控制问题)

java - 我需要什么 Hibernate LockMode 来读取和更新对象,同时防止其他人这样做?