1 (define (make-semaphore-mtx maximal)
5 (cond ((eq? m 'release)
7 (unless (= count maximal)
8 (set! count (+ 1 count)))
13 (set! count (- count 1))
17 (the-sema 'acquire))))
19 (error "Unknown request -- " m))))
24 (define (loop-test-and-set! cell)
25 (if (test-and-set! cell)
26 (loop-test-and-set! cell)
29 (define (make-semaphore-ts maximal)
31 (guard (cons #f '())))
33 (cond ((eq? m 'release)
34 (loop-test-and-set! guard)
35 (unless (= count maximal)
36 (set! count (+ 1 count)))
39 (cond (loop-test-and-set! guard)
41 (set! count (- count 1))
45 (the-sema 'acquire))))
47 (error "Unknown request -- " m))))