6

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

假设我正在写 boids。假设每个 boid 是一个单独的绿色线程,它在表示世界网格的向量或 refs 中改变位置。想想希基的蚁群。

现在,Clojure.org 上的文档指出“所有对 Refs 的读取都将看到从事务起点(它的‘读取点’)开始的‘参考世界’的一致快照。”

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

谢谢!

4

1 回答 1

7

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

如果您在事务之外读取参考,那么您将在读取每个参考时获得瞬时值。您无法保证另一个事务不会在您的读取之间更改一个或多个参考,因此您最终可能会得到不一致的视图。

于 2012-08-16T11:11:51.103 回答