Напишите определение семафора с точки зрения теста-и-набора! операции


Из SICP:

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

б. с точки зрения атомно-тест-и-набор! операций.

(define (make-semaphore max)
  (let ((count 0)
        (cell (list false)))
    (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)
                 (if (test-and-set! cell) (the-semaphore 'acquire))))
            ((eq? m 'release)
             (decrement)
             (if (has-room?) (clear! cell)))))
    the-semaphore))

(define (clear! cell)
  (set-car! cell false))

(define (test-and-set! cell)
  (if (car cell)
      true
      (begin (set-car! cell true)
             false)))

Вы думаете, что этого достаточно? Его можно улучшить?



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