LINUX.ORG.RU

История изменений

Исправление kovrik, (текущая версия) :

Конкретно в твоем примере строка

    (if (check n) (set! account (- account n)) "NO MONEY")))

не является атомарной и в ней отсутствует синхронизация.

В Clojure, например, это решается такой штукой как STM (по ссылке как раз пример с банковскими аккаунтами разобран):
http://sw1nn.com/blog/2012/04/11/clojure-stm-what-why-how/

Исходная версия kovrik, :

Конкретно в твоем примере строка
(if (check n) (set! account (- account n)) «NO MONEY»)))
не является атомарной и в ней отсутствует синхронизация.

В Clojure, например, это решается такой штукой как STM (по ссылке как раз пример с банковскими аккаунтами разобран):
http://sw1nn.com/blog/2012/04/11/clojure-stm-what-why-how/