4
根据书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))
好吧,我误以为dosync启动的原子代码块。感谢你的回答。 – StackedCrooked 2010-05-15 10:35:22
它开始一个交易,但并不保证你放入它的所有东西都是原子的。原子操作是改变和重新设置 - 我必须在事务中调用这些操作。例如,如果你在一个事务中做IO,它可能会发生多次。 – Zak 2010-05-15 13:39:41