为了保持一致性,是否应该在事务中读取多个 Clojure 引用


这是一个

理论问题,动机是我希望更好地理解Clojure的并发性。

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

现在,Clojure.org 的文档指出"Refs 的所有读取都将看到从事务起点(其"读取点")开始的'Ref 世界'的一致快照。

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

谢谢!

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

如果您在事务之外读取引用,那么您只会在读取每个引用的那一刻获得一个瞬时值。您不能保证另一个事务不会在两次读取之间更改一个或多个引用,因此您最终可能会得到不一致的视图。

最新更新