Clojure并发编程:原子、通知、约束与引用类型详解
1. 原子(Atoms)
原子是最基本的引用类型,它实现了同步、无协调的原子比较并设置(compare-and-set)修改操作。这意味着修改原子状态的操作会阻塞,直到修改完成,并且每次修改都是独立的,无法同时协调两个原子的修改。
1.1 创建与修改原子
使用 atom 函数创建原子, swap! 是最常用的修改操作,它将原子的值设置为对原子当前值应用某个函数的结果。示例如下:
(def sarah (atom {:name "Sarah" :age 25 :wears-glasses? false}))
(swap! sarah update-in [:age] + 3)
; 输出: {:age 28, :wears-glasses? false, :name "Sarah"}
当 swap! 返回时, sarah 原子的值将被设置为 (update-in @sarah [:age] + 3) 的结果,并且 swap! 总是返回新设置的值。
1.2 swap! 的重试语义
由于原子使用比较并设置语义,如果在更新函数返回之前原子的值发生了变化(由于其他线程的操作), swap! 会重试,使用原子的最新值再次调用更新函数,直
Clojure并发编程:原子、引用等类型详解
超级会员免费看
订阅专栏 解锁全文
2863

被折叠的 条评论
为什么被折叠?



