[gambit-list] thread-cells?

Adam adam.mlmb at gmail.com
Mon Mar 12 20:44:13 EDT 2018


Interesting. Great addition to thread-specific.

2018-03-13 0:34 GMT+08:00 Marc Feeley <feeley at iro.umontreal.ca>:

> Extensions to Gambit threads can be done currently using the
> define-type-of-thread special form.  For example:
>
> (define-type-of-thread mythread
>   constructor: construct-mythread
>   errptr)
>
> (define (make-mythread thunk)
>   (thread-init!
>    (construct-mythread #f)
>    thunk))
>
> (define t
>   (make-mythread
>    (lambda ()
>      (pp (mythread-errptr (current-thread))))))
>
> (mythread-errptr-set! t 'foo)
>
> (thread-start! t)
>
> (thread-join! t)
>
> So I don’t see the need for adding this feature to the basic Gambit
> threads.
>
> Marc
>
>
>
> > On Mar 10, 2018, at 8:45 AM, Dimitris Vyzovitis <vyzo at hackzen.org>
> wrote:
> >
> > Marc,
> >
> > Could we add thread-cells?
> > They can be easily implemented with a per-thread hash-table, that only
> gets initialized if accessed.
> >
> > They are incredibly useful for per thread caches, and probably a lot of
> other things.
> >
> > For instance, I have this common pattern that i see a lot:
> >
> > (def errptr-cache
> >   (make-hash-table-eq weak-keys: #t))
> > (def errptr-cache-mutex
> >   (make-mutex))
> >
> > (def (get-errptr)
> >   (with-lock errptr-cache-mutex
> >     (lambda ()
> >       (cond
> >        ((hash-get errptr-cache (current-thread))
> >         => (lambda (errptr)
> >              (errptr_clear errptr)
> >              errptr))
> >        (else
> >         (let (errptr (check-ptr get-errptr (make_errptr)))
> >           (hash-put! errptr-cache (current-thread) errptr)
> >           errptr))))))
> >
> > and I would like to eliminate both the lock and the weak table.
> >
> > I can add it and make a pr, but I wanted to consult with you first.
> >
> > -- vyzo
>
> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20180313/6b6a704e/attachment.htm>


More information about the Gambit-list mailing list