2011-04-14 26 views
1

我在我的Clojure代码中随处可用,然后我意识到我到处都在使用ref-set。这是否会破坏STM的变化历史?或者我应该只使用alterref-set来初始化ref?这两个修改和ref-set更新Clojure中的STM树?

我不确定这种差异是否仅仅是语法上的,而alter最后总是调用ref-set。有人能够启发我吗?

回答

4
(alter aref f arg1 ... argn) 

是基本相同

(ref-set aref (f @aref arg1 ... argn)) 

用于与reset!swap!原子的类似。

+0

我以为交换!线程安全并重置!不是,还是我误解了? – Zubair 2011-04-14 08:12:56

+2

STM的全部重点是解决并发问题,你提到的所有功能都是线程安全的。 – skuro 2011-04-14 08:29:17

+0

@skuro。好的,谢谢你确认重置!并交换!是线程安全的 – Zubair 2011-04-14 08:40:14