История изменений
Исправление 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/