Обновляют ли alter и ref-set дерево STM в Clojure одновременно?

#clojure #stm

#clojure #stm

Вопрос:

Я использую ссылки везде в своем коде Clojure, а затем понял, что использую ref-set везде. Уничтожает ли это историю изменений в STM? Или я должен использовать alter только и ref-set для инициализации ссылки?

Я не уверен, что разница просто синтаксическая и alter заканчивается вызовом ref-set в любом случае. Может ли кто-нибудь меня просветить?

Ответ №1:

 (alter aref f arg1 ... argn)
  

по сути, это то же самое, что

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

Аналогично для атомов с reset! и swap! .

Комментарии:

1. Я думал поменять местами! была потокобезопасность и сброс! не было, или я ошибаюсь?

2. Весь смысл STM заключается в решении проблем параллелизма, все функции, которые вы упомянули, должны быть потокобезопасными.

3. @skuro. Хорошо, спасибо за подтверждение этого сброса! и поменяйте местами! являются ли потокобезопасными