Привет, ребята: Документация для 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, под капотом, не «умно» обеспечивает атомарно-ориентированные операции, ориентированные на тип, для атомов.
Таким образом, я бы спросил - что именно метод атома «делает» с нашими объектами (т. Е. Просто ли он синхронизирует весь объект?)