phobos / tango / ares
lijat.meREM at OVE.gmail.com
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.
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