Условия гонки и атомы clojure

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

7
задан TacticalCoder 12 March 2012 в 13:14
поделиться