Ben がここ変えたらしいんだけど,
(define (make-account balance) (define (withdraw amount) (if (>= balance amount) (begin (set! balance (- balance amount)) balance) "Insufficient funds")) (define (deposit amount) (set! balance (+ balance amount)) balance) ;; continued on next page (let ((protected (make-serializer))) (define (dispatch m) (cond ((eq? m 'withdraw) (protected withdraw)) ((eq? m 'deposit) (protected deposit)) ((eq? m 'balance) ((protected (lambda () balance)))) ; serialized <= ここ!!!!! (else (error "Unknown request -- MAKE-ACCOUNT" m)))) dispatch))
atomic にしなきゃいけないのは*1代入操作が発生する部分で,読み出しは安全.特に変える必要はないんじゃないかと.
*1:SICP で出てくる make-serializer の実装は atomic なわけじゃないけど