phobos / tango / ares

Johan Granberg lijat.meREM at
Sun Feb 11 00:24:34 PST 2007

Sean Kelly wrote:

> kris wrote:
>> Charles D Hixson wrote:
>>> I'm not sure whether you were quoting the documentation, or reporting
>>> your understanding.  If you were quoting the documentation, I think it
>>> needs editing.
>>  From the doc: "Please note that the class itself is stateful, and
>> therefore a single instance is not shareable across multiple threads."
>> Thus, it is considered unwise to share a single instance of Sprint
>> across multiple threads. However, multiple threads /can/ share a single
>> instance if they follow this pattern:
>> synchronized (GlobalSprint)
>>               GlobalSprint ("do my formatting", with, these, args);
>> This is a fairly standard mechanism in D for sharing resources across
>> threads, and it's what I had referred to.
> For what it's worth, Tango also provides thread-local storage, and while
> it isn't ideal from a semantic standpoint (a bona-fide 'local' storage
> class would be much nicer), it's an option worth considering.  It could
> be used like so:
>      auto TLSPrint = new ThreadLocal!(Sprint);
>      // do this in each thread
>      TLSPrint.val = new Sprint;
>      // use the local Sprint instance
>      TLSPrint.val()( "do my formatting", with, these, args );
> Accessing a TLS value tyically amounts to a few pointer dereferences so
> it's far less costly than acquiring a mutex, which may or may not be
> important to you.
> As a side-note... Tango currently provides 64 TLS "slots".  This amount
> is fixed mostly to keep performance as high as possible, but it could
> easily be increased if it turns out not to be enough.
> Sean

What happens when you run out of slots?

Would it be possible to have a dynamic amount of slots (doubling whenever
there is to few)?

More information about the Digitalmars-d-learn mailing list