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@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