Привет, ребята: Документация для clojure "atom" гласит, что -
"Changes to atoms are always free of race conditions."
Однако состояние гонки определяется не только с точки зрения изменения, а скорее в контексте параллельных логических операций в разных потоках.
Мне интересно, каково значение гарантии того, что «Изменения в атомах всегда свободны от состояния гонки»? В java у нас есть атомарные примитивы, которые поддерживают определенные потокобезопасные операции, которые специфичны (например, AtomicInteger поддерживает операцию "getAndIncrement"). Но атомы Clojure не зависят от типа, например, мы можем вызвать:
(atom "Hi im a string") Or
(atom (.getClass Object))
Гибкость метода атома означает, что Clojure под капотом не «умно» обеспечивает специфичные для типа атомарные / потокобезопасные операции для атомов.
Таким образом, я хотел бы спросить, что именно метод atom "делает" с нашими объектами (т.е. он просто синхронизирует весь объект?)