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