这是一个理论问题,因为我希望更好地理解 Clojure 的并发性。
假设我正在编写 boid。假设每个 boid 是一个单独的绿色线程,在表示世界网格的向量或引用中改变位置。想想希基的蚁群。
现在,Clojure.org 上的文档指出“所有对 Ref 的读取都将看到作为交易起点(其“读取点”)的“Ref 世界”的一致快照。”
这是否意味着我只能通过读取事务中的引用向量(即在 dosync 上下文中?)来获得模拟的一致快照,例如绘制它。
谢谢!
最佳答案
如果您想要一致的快照,您需要一个事务。
如果您在事务之外读取引用,那么您将在读取每个引用的那一刻获得一个瞬时值。您无法保证另一事务不会在您的读取之间更改一个或多个引用,因此最终可能会出现不一致的 View 。
关于concurrency - 是否应该在事务中读取多个 Clojure 引用以保持一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11985534/