[gambit-list] thread-cells?
Dimitris Vyzovitis
vyzo at hackzen.org
Mon Mar 12 14:44:42 EDT 2018
Ok, I hadn't thought of that.
-- vyzo
On Mon, Mar 12, 2018 at 6:34 PM, Marc Feeley <feeley at iro.umontreal.ca>
wrote:
> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20180312/be945b96/attachment.htm>
More information about the Gambit-list
mailing list