On 11/20/2010 5:16 PM, Miles Bader wrote:
Patrick Horgan<phorgan1@xxxxxxxxx> writes:
T& getaccess()
{
static T localT;
return localT;
}
...
What happens in the presence of threading? What if two threads enter
getaccess and exit in different orders? I'm ignoring here any
threading issues that a T itself may have, and only thinking about the
local static initialization itself.
Would the local t get initialized more than once?
The language says that t would only be initialized the first time the
routine is called, so if the first one sleeps and a second one gets in
and out before the first thread gets rescheduled, can it return a
reference to localT before localT is initialized?
gcc, at least (well, versions above 4.0), takes care to make such local
static initializations thread-safe. I presume that other modern
compilers likely do the same.
I'd agree with that, if you drop the static and initialize explicitly:
T localT = (T)0;
but then, each thread has its own localT, zeroed each time it comes into
scope.
--
Tim Prince