函数Clojure应该互换!应用于幂等?

恩德拉塞克

我正在经历Clojure Koans,现在正在玩原子游戏。我的问题与Koans无关,而是一个普遍的问题。

考虑以下Koans的(简化)示例:

(def atomic-clock (atom 0))

(meditations
    (= 1 (do
        (swap! atomic-clock inc)
            @atomic-clock)))

交换文档!声明inc可以多次调用该函数(在这种情况下),因此该函数应无副作用。

显然,inc它没有副作用,但不是幂等的。这是否意味着上面的断言实际上可能仍然失败?也就是说,在确实多次调用该函数的情况下,原子的值会增加一次以上吗?

米歇尔·马尔奇克

swap!如果有多个线程争用修改Atom ,则可能多次调用传递给该函数的函数但是,只要没有副作用,Atom的因果历史将只反映最后一次调用的返回。1个

这是一种可能的情况:

  1. 线程1尝试(swap! atomic-clock inc)

  2. 线程2尝试相同。

  3. 线程2设法执行其swap!第一个。

  4. 线程1尝试对原子进行比较并交换,但失败了,因为它对原始值的概念现在已过时。

  5. 线程1重试并成功提交。

在这里有3个调用inc,在线程1上两个,在线程2上一个。

inc不是幂等的事实不是问题。


1抽象地考虑;Clojure实际上并不存储Atom的历史记录信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

函数Clojure应该互换!应用于幂等?

来自分类Dev

将函数列表应用于参数clojure

来自分类Dev

构造函数不能应用于给定的类型,并且应该声明名称

来自分类Dev

Clojure:如何将函数应用于特定嵌套级别的值?

来自分类Dev

Clojure:将函数应用于地图向量中的地图中的每个值

来自分类Dev

Clojure 将函数列表应用于参数列表

来自分类Dev

函数,将函数应用于列表

来自分类Dev

将函数应用于字典值

来自分类Dev

将函数应用于矩阵的多行

来自分类Dev

高阶函数应用于数组

来自分类Dev

将函数应用于元素列表

来自分类Dev

使用应用于本机JavaScript函数

来自分类Dev

Django的。将函数应用于queryset

来自分类Dev

函数应用于数据集R

来自分类Dev

将isAlpha应用于递归函数

来自分类Dev

将函数应用于元素列表

来自分类Dev

将函数应用于变量

来自分类Dev

应用于用户定义的函数

来自分类Dev

逐行将函数应用于向量

来自分类Dev

将函数应用于元组数组

来自分类Dev

Matlab:将函数应用于向量

来自分类Dev

dlply函数未应用于子集

来自分类Dev

将函数应用于数据框

来自分类Dev

将函数应用于字典

来自分类Dev

将函数应用于整个表

来自分类Dev

Django:应该重写哪种方法或函数才能将markdown2应用于通用视图渲染?

来自分类Dev

Clojure:如何将函数应用于哈希映射值,其中一些是向量

来自分类Dev

Clojure:将功能应用于地图的叶节点

来自分类Dev

将多种方法应用于Clojure列表?