[gambit-list] thread-cells?

Marc Feeley feeley at iro.umontreal.ca
Mon Mar 12 12:34:48 EDT 2018


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




More information about the Gambit-list mailing list