parameter mutation and per-thread storage Shiro Kawai (08 Sep 2021 08:19 UTC)
Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen (08 Sep 2021 09:24 UTC)
Re: parameter mutation and per-thread storage Shiro Kawai (09 Sep 2021 04:14 UTC)
Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen (13 Sep 2021 08:32 UTC)
Re: parameter mutation and per-thread storage Shiro Kawai (17 Sep 2021 00:07 UTC)
Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen (21 Sep 2021 15:55 UTC)
Re: parameter mutation and per-thread storage Shiro Kawai (22 Sep 2021 20:24 UTC)
Re: parameter mutation and per-thread storage John Cowan (10 Sep 2021 02:33 UTC)
Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen (13 Sep 2021 07:47 UTC)
Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen (05 Nov 2022 19:52 UTC)
Re: parameter mutation and per-thread storage Shiro Kawai (05 Nov 2022 20:39 UTC)
Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen (05 Nov 2022 20:57 UTC)
Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen (05 Nov 2022 21:00 UTC)

Re: parameter mutation and per-thread storage Marc Nieper-Wißkirchen 05 Nov 2022 20:57 UTC

Am Sa., 5. Nov. 2022 um 21:39 Uhr schrieb Shiro Kawai <xxxxxx@gmail.com>:
>
> Is it pushed?  The visible HEAD on github is 6a2319d.

I forgot to push it.  Should be visible now.

>
> Actually I was composing an email regarding per-thread parameters.  As I'm revising Gauche to adopt srfi-226, some concern arose from users.  In most use cases, the existing code that uses parameters for thread local storage can be rewritten using thread-locals.  However, there are cases that it's not trivial to migrate; for example, a parameter is defined elsewhere, and a library mutates it, assuming it's thread-safe.  It is ok if the library can rewrite it using parameterize to avoid mutation, but it's not always trivial.  So I plan to provide per-thread parameters at least for a while during transition.
>
> On the other hand, per-thread parameters do seem to complicate implementation.  My plan is to copy the parameterization chain when a thread is created, and normal parameters would share a box, while per-thread parameters would have separate boxes.  It incurs more overhead of thread creation.   I wonder if there's a better way.

The solution in the sample implementation (see hopefully pushed
commit) is to use inheritable thread-local cells. For thread
parameters, parameterize creates a new inheritable thread-local cell
whose default is the new value.

To speed up thread creation (which needs to copy values of inheritable
thread locals) observe that only those inheritable thread locals have
to be copied that have ever been set.  So only those have to be kept
in a (weak) list.  This means that parameterize means no overhead for
thread creation, only mutating of a thread parameter.

(I haven't made this optimization in my sample implementation yet.)

Thank you very much for your feedback!

Marc