;; Producer/Consumer-Problem mit synchronem Message-Passing (define-record-type :buffer (really-make-buffer insert-channel remove-channel) buffer? (insert-channel buffer-insert-channel) (remove-channel buffer-remove-channel)) (define (make-buffer) (let ((insert-channel (make-sync-channel)) (remove-channel (make-sync-channel))) (letrec ((empty (lambda () (full (receive-sync insert-channel)))) (full (lambda (value) (send-sync remove-channel value) (empty)))) (spawn empty)) (really-make-buffer insert-channel remove-channel))) (define (insert buffer value) (send-sync (buffer-insert-channel buffer) value)) (define (remove buffer) (receive-sync (buffer-remove-channel buffer)))