这是一个理论问题,这是因为我希望更好地理解Clojure的并发性。
让我们说我正在写博客。假设每个boid是一个单独的绿色线程,它会改变向量中的位置或表示世界网格的refs。想想希基的蚂蚁殖民地。
现在,Clojure.org上的文档声明" Refs的所有读取都将看到“Ref world”的一致快照,作为交易的起点(其“读取点”)。"
这是否意味着我只能通过在事务中读取我的refs向量(即在dosync上下文中?)来获得模拟的一致快照,例如绘制它?
谢谢!
答案 0 :(得分:6)
如果您想要一致的快照,则需要一个事务。
如果您在交易之外阅读了参考资料,那么您只需在阅读每一项资料时获得瞬时值。您不能保证另一个事务不会在您的读取之间更改一个或多个引用,因此最终可能会出现不一致的视图。