Clojure refs和add-watch

时间:2011-07-21 15:32:09

标签: clojure

假设我有一个ref状态,它每30秒更新一次,并且我想附加一个fn,可能需要更长时间才能完成。假设在时间0 ref更新并且fn在时间30调用ref再次更新但fn仍在运行。我是否正在运行相同函数的两个副本,或者只是跳过并在60时执行,假设当时fn返回?

编辑:我正在尝试更改引用的状态。它在其他地方更新我只是想用它作为触发器进行一些控制计算。

1 个答案:

答案 0 :(得分:1)

如果您使用ref,则两个函数将并行运行并争夺生成ref的下一个状态的权利,而失败者必须再次运行。

这是refs和agent之间的区别之一。代理程序按顺序运行,因为它们有一个等待在它们上运行的函数队列。