Clojure 原子和参考
根据这本书,参考文献管理共享状态的协调、同步变化,原子管理共享状态的不协调、同步变化 如果我理解正确,“协调”意味着将多个更改封装为一个原子操作。如果是这样,那么在我看来,协调只需要使用dosync调用 例如,以下两者之间的区别是什么:Clojure 原子和参考,clojure,Clojure,根据这本书,参考文献管理共享状态的协调、同步变化,原子管理共享状态的不协调、同步变化 如果我理解正确,“协调”意味着将多个更改封装为一个原子操作。如果是这样,那么在我看来,协调只需要使用dosync调用 例如,以下两者之间的区别是什么: (def i (atom 0)) (def j (atom 0)) (dosync (swap! i inc) (swap! j dec)) 以及: 参考文献使用。。。多斯尼克!Dosync和参考文献一起工作,Dosync并不神奇,也不知道其他参考类
(def i (atom 0))
(def j (atom 0))
(dosync
(swap! i inc)
(swap! j dec))
以及:
参考文献使用。。。多斯尼克!Dosync和参考文献一起工作,Dosync并不神奇,也不知道其他参考类型或副作用 您的第一个示例相当于:
(def i (atom 0))
(def j (atom 0))
(do ; <--
(swap! i inc)
(swap! j dec))
(定义i(原子0))
(定义j(原子0))
(do;好的,我错误地认为dosync启动了一个原子代码块。谢谢你的回答。它启动了一个事务,但不能保证你放在里面的所有东西都是原子的。原子操作是alter和ref set-这些必须在事务中调用。例如,如果你在事务中执行IO,它可能会发生多次.
(def i (atom 0))
(def j (atom 0))
(do ; <--
(swap! i inc)
(swap! j dec))