[plt-dev] thread-specifics [PATCH]

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Tue Mar 3 14:35:04 EST 2009

Is there a reason this needs to be built in, instead of implemented as
a weak hash table?

At Tue, 3 Mar 2009 14:31:33 -0500 (EST), Dimitris Vyzovitis wrote:
> The attached patch adds two new atomic primitives implementing 
> thread-specifics:
> (thread-get-specific thread? (undefined (lambda () #f)) -> any?
>   Retrieve the specific value from a thread.
>   The optional undefined thunk is used to provide a value when the
>   specific has not been set by the target thread.
> (thread-set-specific! any?) -> void
>   Set the specific value for the current thread.
> 
> These primitives are useful for communicating publicly visible information
> and simplify common synchronization patterns.
> 
> Some simple examples in the test module [thread-specific.ss]:
> async: an asynchronous computation wrapper around threads.
> tagged: a state machine that tags its current state.
> my-thread: a synchronous thread spawner that places an ownership mark.
> 
> test run:
> > (require "test-threadsp.ss")
> > (run-tests)
> 
> (sync (async a1))
>   => 1
>   ; correct
> 
> (exn? v2)
>   => #t
>   ; correct
> 
> (thread-get-specific tag)
>   => b1
>   ; correct
> 
> (thread-get-specific tag)
>   => b2
>   ; correct
> 
> (thread-get-specific tag)
>   => b3
>   ; correct
> 
> (my-thread? (thread void) mark)
>   => #f
>   ; correct
> 
> (my-thread? (my-thread void mark) mark)
>   => #t
>   ; correct
> 
> -- vyzo



Posted on the dev mailing list.