Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
alter和ref set是否都更新Clojure中的STM树?_Clojure_Stm - Fatal编程技术网

alter和ref set是否都更新Clojure中的STM树?

alter和ref set是否都更新Clojure中的STM树?,clojure,stm,Clojure,Stm,我在Clojure代码中到处都使用ref,然后我意识到我到处都在使用ref set。这会破坏STM中的更改历史吗?或者我应该只使用alter和ref set来初始化ref吗 我不确定这种差异是否仅仅是语法上的,而且alter最终还是调用了ref set。有人能启发我吗 (alter aref f arg1 ... argn) 基本上与 (ref-set aref (f @aref arg1 ... argn)) 类似于原子的reset和交换 基本上与 (ref-set aref (f @ar

我在Clojure代码中到处都使用ref,然后我意识到我到处都在使用
ref set
。这会破坏STM中的更改历史吗?或者我应该只使用
alter
ref set
来初始化ref吗

我不确定这种差异是否仅仅是语法上的,而且
alter
最终还是调用了
ref set
。有人能启发我吗

(alter aref f arg1 ... argn)
基本上与

(ref-set aref (f @aref arg1 ... argn))
类似于原子的
reset
交换

基本上与

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

类似于原子的
reset
交换

我想交换!是线程安全和重置!不是吗,还是我弄错了?STM的全部目的是解决并发问题,您提到的所有函数都是线程安全的。@skuro。好的,谢谢你确认重置!交换!你是我想交换的!是线程安全和重置!不是吗,还是我弄错了?STM的全部目的是解决并发问题,您提到的所有函数都是线程安全的。@skuro。好的,谢谢你确认重置!交换!是线程安全的