原子和参考文献

时间:2010-05-15 06:59:17

标签: clojure

根据书籍Programming Clojure refs管理对共享状态和原子的协调,同步更改,管理对共享状态的不协调的同步更改。

如果我理解正确“协调”意味着多个更改被封装为一个原子操作。如果是这种情况,那么在我看来,协调只需要使用dosync调用。

例如:

之间有什么区别?
(def i (atom 0))
(def j (atom 0))

(dosync
  (swap! i inc)
  (swap! j dec))

(def i (ref 0))
(def j (ref 0))

(dosync
  (alter i inc)
  (alter j dec))

1 个答案:

答案 0 :(得分:13)

使用... dosync协调参考! Dosync和refs一起工作,dosync并不神奇,对其他参考类型或副作用一无所知。

你的第一个例子相当于:

(def i (atom 0))
(def j (atom 0))

(do ; <--
  (swap! i inc)
  (swap! j dec))