concurrency - 是否应该在事务中读取多个 Clojure 引用以保持一致性?

标签 concurrency clojure stm refs

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

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

现在,Clojure.org 上的文档指出“所有对 Ref 的读取都将看到作为交易起点(其“读取点”)的“Ref 世界”的一致快照。”

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

谢谢!

最佳答案

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

如果您在事务之外读取引用,那么您将在读取每个引用的那一刻获得一个瞬时值。您无法保证另一事务不会在您的读取之间更改一个或多个引用,因此最终可能会出现不一致的 View 。

关于concurrency - 是否应该在事务中读取多个 Clojure 引用以保持一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11985534/

相关文章:

java - 为什么 Java Concurrency In Practice list 5.18 不能用锁自动完成?

concurrency - 选择正确的 Clojure 引用类型以协调写入/读取

haskell - 如何在 Haskell 中产生并发计算?

linux - 少数繁忙线程与许多闲置线程

c - 管理共享内存中的互斥量

java - 使用状态机解析 wiki 标记

clojure - Clojure 中的 make-keyword-map - 惯用语?

clojure - 有没有办法在 clojure 中创建一个仅在函数范围内可见的命名函数?

android - AsyncTask 是否存在并发错误?