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