Programming Clojure学习笔记——并发

6.3 使用Atoms进行非并发同步修改
原子(Atoms)是一种比引用轻量的同步机制。
创建原子语法:
(atom initial-state options?)
这里的选项options与引用refs的选项一样
示例:
使用atom存贮当前曲目代替引用ref
(def current-track (atom "Venus, the Bringer of Pease"))
同样的也可以通过deref和@读者宏查看atom的值:
user=> (deref current-track)
"Venus, the Bringer of Peace"
user=> @current-track
"Venus, the Bringer of Peace"

原子(atoms)不参与事务,因此修改atoms的值时,不需要dosync,直接调用reset!:
(reset! an-atom newval)
如修改current-track为“Credo”:
(reset! current-track "Credo")
使用reset!不能直接同时修改current-track和current-composer在一个原子中。但是可以通过将current-track和current-composer存贮到一个map中,然后通过atom来同时修改:
user=> (def current-track (atom {:title "Credo" :composer "Byrd"}))
#'user/current-track
user=> (reset! current-track {:title "Spem in Alium" :composer "Tallis"})
{:title "Spem in Alium", :composer "Tallis"}

如果要部分修改上述map,则可以使用swap!:
(swap! an-atom f & args)
swap更新atom的值通过函数f及其参数args,如只修改上述current-track的标题:
user=> (swap! current-track assoc :title "Sancte Deus")
{:title "Sancte Deus", :composer "Tallis"}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值