【问题标题】:Should multiple Clojure refs be read in a transaction for consistency?是否应该在事务中读取多个 Clojure 引用以保持一致性?
【发布时间】:2012-08-16 10:47:01
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

    标签: concurrency clojure stm refs


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 2019-10-23
      • 1970-01-01
      • 2010-10-26
      相关资源
      最近更新 更多