Напишите определение семафора с точки зрения мьютексы


Из SICP:

Упражнения 3.47. Семафор (размер N) представляет собой обобщение мьютекс. Как мьютекс, семафор поддерживает приобретения и операции, но это является более общим в том, что до Н процессы могут приобретать ее одновременно. Дополнительные процессы, которые пытаются семафора должны ждать операций выпуска. Дать реализации семафоров

а. с точки зрения мьютексы

(define (make-semaphore max)
  (let ((count 0)
        (the-mutex (make-mutex)))
    (define (increment)
      (set! count (+ count 1)))
    (define (decrement)
      (set! count (- count 1)))
    (define (has-room?) (> max count))
    (define (the-semaphore m)
      (cond ((eq? m 'acquire)
             (if (has-room?)
                 (increment)
                 (the-mutex 'acquire)))
            ((eq? m 'release)
             (decrement)
             (if (has-room?) (the-mutex 'release)))))
    the-semaphore))

Я писал этот ответ и я надеюсь, чтобы выяснить, если это правильно, и как его можно улучшить. Спасибо за ваше время.



262
1
задан 20 июня 2011 в 05:06 Источник Поделиться
Комментарии