Meyers Item 4 Singleton in presence of threading

Paweł Sikora pluto@agmk.net
Sun Nov 21 21:34:00 GMT 2010


On Sunday 21 November 2010 02:16:27 Miles Bader wrote:
> Patrick Horgan <phorgan1@yahoo.com> 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.

modulo -fno-threadsafe-statics option ;)



More information about the Gcc-help mailing list