Re: Threadsafe singletons
"David Barrett-Lennard" <davidbl@iinet.net.au> schrieb im Newsbeitrag
news:1154356686.159152.130550@s13g2000cwa.googlegroups.com...
I've often used something similar; I've even posted about it
once or twice here. In my case, I use an explicit pointer and
new, but the principle is the same. Except that I know how an
explicit pointer and new work---I can only guess as to how the
compiler ensures creation on only the first call to GetInstance.
At least some compilers, in a threaded environment, use
something like pthread_once to initialize the variable, so
constructing it before entering main isn't necessary.
Good point. I didn't know some compilers would do that.
What exactly is the problem with creation of a local static object and
threads?
At the
other extreme, other compilers document nothing, and may use
some technique which isn't thread safe. In the absense of any
specific guarantees, I prefer to avoid counting too much on what
the compiler does here.
My own technique is basically:
static MySingleton* ourInstance = &MySingleton::instance() ;
MySingleton&
MySingleton::instance()
{
if ( ourInstance == NULL ) {
ourInstance = new MySingleton ;
}
return *ourInstance ;
}
How is it deleted?
This interests me too.
Formally, there is no guarantee that static variables are
constructed before entering main, so you have no guaranteed that
your s_init object (or my ourInstance pointer) will be
initialized before entering main.
Really! Are you referring to the C++ standard?
It is described in 3.6.2/3. If I understand this part of the standard
correctly, it does, however, guarantee that the ourInstance pointer will be
initialized before it is first used.
--
Matthias Hofmann
Anvil-Soft, CEO
http://www.anvil-soft.com - The Creators of Toilet Tycoon
http://www.anvil-soft.de - Die Macher des Klomanagers
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]