RosettaCodeData/Task/Mutex/Racket/mutex-2.rkt

11 lines
364 B
Racket
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
(define-syntax-rule (define/atomic (name arg ...) E ...)
(define name
(let ([sema (make-semaphore 1)])
(lambda (arg ...)
(dynamic-wind (λ() (semaphore-wait sema))
(λ() E ...)
(λ() (semaphore-post sema)))))))
;; this does the same as the above now:
(define/atomic (foo x)
(... do something ...))