#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. Хорошо, спасибо за подтверждение этого сброса! и поменяйте местами! являются ли потокобезопасными