Код Ревью

Сравни свои решения

    (define (make-semaphore n)
  (let ((count n)
        (mutex (make-mutex))
        (mv (make-mutex)))
    (define (acquire)
      (mutex 'acquire)
      (mv 'acquire)
      (set! count (- count 1))
      (when (> count 0)
        (mutex 'release))
      (mv 'release))
    (define (release)
      (mv 'acquire)
      (when (= count 0)
          (mutex 'release))
      (when (< count n)
        (set! count (+ count 1)))
      (mv 'release))
  
    (define (the-semaphore m)
      (cond ((eq? m 'acquire) (acquire))
            ((eq? m 'release) (release))
            ((eq? m 'count) count)))
    the-semaphore))
    (define (make-semaphore n)
  (let ((count n)
        (mutex (make-mutex))
        (mv (make-mutex)))
    (define (acquire)
      (mutex 'acquire)
      (mv 'acquire)
      (set! count (- count 1))
      (when (> count 0)
        (mutex 'release))
      (mv 'release))
    (define (release)
      (mv 'acquire)
      (when (= count 0)
          (mutex 'release))
      (when (< count n)
        (set! count (+ count 1)))
      (mv 'release))
  
    (define (the-semaphore m)
      (cond ((eq? m 'acquire) (acquire))
            ((eq? m 'release) (release))
            ((eq? m 'count) count)))
    the-semaphore))
    (define (make-semaphore n)
  (let ((count n)
        (mutex (make-mutex))
        (mv (make-mutex)))
    (define (acquire)
      (mutex 'acquire)
      (mv 'acquire)
      (set! count (- count 1))
      (when (> count 0)
        (mutex 'release))
      (mv 'release))
    (define (release)
      (mv 'acquire)
      (when (= count 0)
          (mutex 'release))
      (when (< count n)
        (set! count (+ count 1)))
      (mv 'release))
  
    (define (the-semaphore m)
      (cond ((eq? m 'acquire) (acquire))
            ((eq? m 'release) (release))
            ((eq? m 'count) count)))
    the-semaphore))
    (define (make-semaphore n)
  (let ((count n)
        (mutex (make-mutex))
        (mv (make-mutex)))
    (define (acquire)
      (mutex 'acquire)
      (mv 'acquire)
      (set! count (- count 1))
      (when (> count 0)
        (mutex 'release))
      (mv 'release))
    (define (release)
      (mv 'acquire)
      (when (= count 0)
          (mutex 'release))
      (when (< count n)
        (set! count (+ count 1)))
      (mv 'release))
  
    (define (the-semaphore m)
      (cond ((eq? m 'acquire) (acquire))
            ((eq? m 'release) (release))
            ((eq? m 'count) count)))
    the-semaphore))