Атомы и ссылки - PullRequest
       17

Атомы и ссылки

4 голосов
/ 15 мая 2010

Согласно книге Программирование Clojure ссылки управляют согласованными синхронными изменениями общего состояния, а атомы управляют несогласованными синхронными изменениями общего состояния.

Если я правильно понял, «скоординированный» подразумевает, что множественные изменения инкапсулируются как одна атомарная операция. Если это так, то мне кажется, что для координации требуется только вызов dosync.

Например, в чем разница между:

(def i (atom 0))
(def j (atom 0))

(dosync
  (swap! i inc)
  (swap! j dec))

и

(def i (ref 0))
(def j (ref 0))

(dosync
  (alter i inc)
  (alter j dec))

1 Ответ

13 голосов
/ 15 мая 2010

Ссылки координируются с использованием ... dosync! Dosync и ссылки работают вместе, dosync не волшебен и ничего не знает о других ссылочных типах или побочных эффектах.

Ваш первый пример эквивалентен:

(def i (atom 0))
(def j (atom 0))

(do ; <--
  (swap! i inc)
  (swap! j dec))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...