在Clojure中解决并发问题我们可以使用atom来编写:
user=> (def my-atom (atom 0))
#'user/my-atom
user=> @my-atom
0
user=> (swap! my-atom inc)
1
user=> @my-atom
1
user=> (swap! my-atom (fn [n] (* (+ n n) 2)))
4
Run Code Online (Sandbox Code Playgroud)
我们知道这(在Clojure实现中)是Java Atomic对象的包装器.
有趣的是,Atoms 在C语言中以句法级别复制 - 即使JavaScript运行时没有原子参考.
我的问题是,如何在Clojurescript中实现Atoms?它们只是一个对象包装器吗?
我正在研究Clojure中的并发编程. http://clojure.org/concurrent_programming
我知道atom,ref和agent表单用于维护程序状态.
只有ref用于协调更新,因此在执行更改时使用dosync宏.
所以很明显STM引擎就在这一点上.
只是想明确我的怀疑,
Clojure STM是否也与原子和代理形式有关系?或者他们只是利用java.util.concurrent.atomic功能?