Читанул на досуге главу SICP о банковских счетах. Я особо не вникал, могу тупить, но мне показалось, что проблема надуманая какая то. Там дальше обсуждается про проблемы доступа к общему ресурсу и прочее. Суть проблемы в том, что, пока один клиент снимает с общего счета, идет проверка второго запроса, и в итоге, банк может выдать больше чем надо, потому что в период между проверкой и снятием другой процесс может снять деньги. Как-то так. Я накидал вот такую простенькую реализацию:
(define account 100)
(define check
(lambda(n) (>= account n)))
(define withdraw
(lambda(n)
(if (check n) (set! account (- account n)) "NO MONEY")))
(define john-get withdraw)
(define jack-get withdraw)
Это ситуация банальной очереди. Один кассир не будет обслуживать сразу двух клиентов. А оба клиента не могут встать на одну и ту же позицию в очереди. Кассир тут - и есть общий ресурс.
Так в чем же проблема, я не понимаю? В том что этот элементарный алгоритм мы можем реализовать через задницу, если постараемся, или о чем там они пишут?