【发布时间】:2015-11-07 04:52:17
【问题描述】:
(ns learnclojure.core)
(def acct1 (atom 1000 :validator #(>= % 0)))
(def acct2 (atom 1000 :validator #(>= % 0)))
(defn transfer [from-ac to-ac amt]
(swap! to-ac + amt)
(swap! from-ac - amt))
(dotimes [_ 10]
(future (transfer acct2 acct1 100)))
(deref acct1)
(deref acct2)
(def acct1 (ref 1000 :validator #(>= % 0)))
(def acct2 (ref 1000 :validator #(>= % 0)))
(defn transfer [from-ac to-ac amt]
(dosync
(alter to-ac + amt)
(alter from-ac - amt)))
(dotimes [_ 10]
(future (transfer acct2 acct1 100)))
(deref acct1)
(deref acct2)
我同时有两个 Clojure 代码更改状态。 使用 atom 的第一个(第 3 - 14 行)似乎工作正常,而使用 ref 的第二个(第 17 和 29 行)显示随机结果。可能有什么问题?
【问题讨论】:
标签: concurrency clojure