Re: Meyers Item 4 Singleton in presence of threading

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux