Threads and Static Data
Robert Fraser
fraserofthenight at gmail.com
Sun Dec 9 23:17:04 PST 2007
Craig Black wrote:
> I'm in the process of hashing out a design for multi-core support for a
> large API developed by myself and a couple other people. I realized
> that static data can be problematic for multiple threads. In many
> cases, it seems that static data should be instantiated on a per-thread
> basis. My solution to this problem is to use a template class called
> "Threaded" that instantiates data for each thread.
>
> static Threaded!(int) x;
>
> Then to access the value, there would have to be a thread ID passed into
> it. So to increment the value you would have.
>
> int temp = x.get(threadID);
> x.set(threadID, temp+1);
>
> (Or, I guess you could use a pointer.)
>
> int *ptr = x.getptr(threadID);
> (*ptr)++;
>
> This solution will do the job, but it is a little clumsy. This seems
> like this is a common problem that warrants better syntax. Ideally, I
> would like to be able access a "threaded" variable just like any other
> so that the above example is simply "x++". I don't have extensive
> experience with D templates and operator overloading. It it possible to
> make this work transparently with all operators? I want to support all
> basic types as well as structs and classes. Could someone with more
> experience fill me in on the caveats involved in implementing something
> like this? Has anyone else already solved this problem? This seems
> like a feature that should be included in the standard library.
>
> -Craig
Tango has tango.core.Thread.ThreadLocal for thrad-local storage. I don't
know about phobos, but if it's not there it should be.
More information about the Digitalmars-d
mailing list