On Fri, Mar 19, 2021 at 12:02 PM Jay McCarthy <[email protected]>
wrote:
> The best thing is to use a semaphore instead of a mutable reference.
> If you can't do that, then I think that you should combine the mutable
> reference with a signaling semaphore. If you can't do that, then I
> can't think of anything but a poll.
>
Is this the kind of thing you meant by 'signalling semaphore'?
#lang racket
(define x #f)
(define sema (make-semaphore 0))
(define (wait-on-x) (sync (semaphore-peek-evt sema)) always-evt)
(define (set-x! val)
(void (thread ; don't print the thread object when running in the repl
(thunk
(sleep 3)
(set! x val)
(semaphore-post sema)))))
(define (check-x)
(match (sync/timeout 10 (wait-on-x))
[#f (displayln "timeout")]
[_ (displayln "success")]))
(set-x! 7)
(check-x) ; pauses for 3 seconds, then outputs "success"
(check-x) ; outputs "success" immediately
(check-x) ; ibid
>
> --
> Jay McCarthy
> Associate Professor @ CS @ UMass Lowell
> http://jeapostrophe.github.io
> Vincit qui se vincit.
>
> On Fri, Mar 19, 2021 at 11:59 AM David Storrs <[email protected]>
> wrote:
> >
> > Suppose I have a function that tests for some condition, e.g.
> >
> > (define current-user (make-parameter #f))
> > (define (current-user-set?) (not (false? (current-user)))
> >
> > What is the best way to say "wait until 'current-user-set?' returns
> true"? I've been through the Events chapter in the Reference and nothing
> seems like a great fit. I could do polling via sleep or alarm-evt but that
> seems inefficient. Is there a better way?
> >
> > --
> > You received this message because you are subscribed to the Google
> Groups "Racket Users" group.
> > To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected].
> > To view this discussion on the web visit
> https://groups.google.com/d/msgid/racket-users/CAE8gKocbPgjcFAF_o2g6mhZBEH8PpeGyJ4CwznKc3DZkMjY%3DGw%40mail.gmail.com
> .
>
--
You received this message because you are subscribed to the Google Groups
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/racket-users/CAE8gKofBk8YjrDMXHykwJBspE5%2BOGDKhC16O%3DP96aXLe0pP90w%40mail.gmail.com.