首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >原子与参考文献有何不同?

原子与参考文献有何不同?
EN

Stack Overflow用户
提问于 2013-08-09 15:41:22
回答 2查看 110关注 0票数 3

原子和参比实际有什么不同?

我理解原子声明不同,并通过swap!函数进行更新,而参考文献在dosync中使用alter。然而,内部实现似乎非常相似,这让我想知道为什么我会使用其中一个而不是另一个。

例如,原子文档页面(http://clojure.org/atoms)声明:

内部交换!读取当前值,将函数应用于它,并尝试将其进行比较和设置.由于另一个线程可能在中间时间内更改了值,因此它可能不得不重试,并在自旋循环中这样做。实际效果是,该值将始终是将所提供的函数应用于当前值的结果,这是原子性的。但是,因为这个函数可能被多次调用,所以它必须没有副作用。

所描述的方法听起来与参考文献中使用的STM非常相似。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-09 15:55:04

不同的是,你不能协调多个原子之间的变化,但是你可以协调多个参考文献之间的变化。

Ref更改必须在dosync块内部进行。档案中的所有变化都发生了,或者都没有发生(原子的),但这延伸到了所有的变化到参考文献在该档案中。这在很大程度上类似于数据库事务。

例如,假设您希望从一个集合中删除一个项并将其添加到另一个集合中,但是没有人看到两个集合都没有该项的情况。用原子来保证是不可能的,但是你可以用参考文献来保证。

票数 8
EN

Stack Overflow用户

发布于 2013-08-09 15:51:33

请记住:

  • 使用参考资料进行同步、协调和共享的更改。
  • 使用Atoms进行同步、独立和共享的更改。

对我来说,我不在乎原子和参考文献之间的实现差异。我关心的是每个用例的“用例”

我使用参考文献,我需要改变不止一个引用类型的状态,我需要ATM语义。当我改变一种引用类型的状态时,我使用原子(对象,取决于您如何看待它)。

例如,如果我需要增加网页分析系统中的页面点击次数,我就使用原子。如果我需要在两个帐户之间转账,我使用参考文献。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18150567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档