并发编程中的数据结构、线程与并行化技术
1. 引用类型的验证器与监视器
1.1 验证器(Validators)
验证器用于在更新引用类型时进行有效性检查。对于变量(vars)和原子(atoms),验证失败会抛出异常以阻止更新;对于代理(agents),验证失败会导致代理失败,需要重启代理;对于引用(refs),验证失败会使事务回滚并重新抛出异常。
示例代码如下:
(set-validator! (var v) pos?)
(set-validator! t (partial < 10)) ; throws exception
(set-validator! g (partial < 10)) ; throws exception
(set-validator! r #(< % 10)) ; works
1.2 监视器(Watchers)
监视器是一种被动机制,用于在引用类型更新后接收通知。与验证器不同,监视器不能阻止更新,只是起到通知作用。对于事务,监视器仅在事务提交后被调用。一个引用类型只能设置一个验证器,但可以关联多个监视器。添加监视器时可以指定一个键,以便监视器根据键来处理通知。
示例代码如下:
(def t (atom 1))
(defn w [key iref oldv newv] (println "Key:" key "Old:" oldv "New:" newv))
(add-watch t :f
并发编程的数据结构、线程与并行化技术
超级会员免费看
订阅专栏 解锁全文

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



