是否应在事务中读取多个Clojure引用以保持一致性?

时间:2012-08-16 10:47:02

标签: concurrency clojure stm refs

这是一个理论问题,这是因为我希望更好地理解Clojure的并发性。

让我们说我正在写博客。假设每个boid是一个单独的绿色线程,它会改变向量中的位置或表示世界网格的refs。想想希基的蚂蚁殖民地。

现在,Clojure.org上的文档声明" Refs的所有读取都将看到“Ref world”的一致快照,作为交易的起点(其“读取点”)。"

这是否意味着我只能通过在事务中读取我的refs向量(即在dosync上下文中?)来获得模拟的一致快照,例如绘制它?

谢谢!

1 个答案:

答案 0 :(得分:6)

如果您想要一致的快照,则需要一个事务。

如果您在交易之外阅读了参考资料,那么您只需在阅读每一项资料时获得瞬时值。您不能保证另一个事务不会在您的读取之间更改一个或多个引用,因此最终可能会出现不一致的视图。