Код Ревью
Сравни свои решения
#| BEGIN (Write your solution here) |#
(define (make-semaphore n)
(when (< n 1) (error "Size is less then 1 -- MAKE-SEMAPHORE"))
(let ((count n)
(m (make-mutex)))
(define (acquire)
(let loop ()
(m 'acquire)
(cond ((> count 0)
(set! count (- count 1))
(m 'release))
(else
(m 'release)
(loop)))))
(define (release)
(m 'asquire)
(set! count (+ count 1))
(m 'release))
(define (dispatch m)
(cond ((eq? m 'acquire) (acquire))
((eq? m 'release) (release))
((eq? m 'count) count)))
dispatch))
#| END |#