phobos / tango / ares
kris
foo at bar.com
Sat Feb 10 20:43:18 PST 2007
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.
But there's no reason to do this kind of thing at all. The use-case for
Sprint is to keep a handy formatter around for doing fast and convenient
layout. Adding synchronized to the mix tends to defeat one of those
desirable attributes, so we don't recommend it :)
If you're content to stash layout content into a temporary buffer
instead, there's Formatter.sprint() which takes an output array. The
output array in such a case would typically be stack-based.
More information about the Digitalmars-d-learn
mailing list