I've been looking all around SO and MSDN for an answer to this question, but cannot seem to find a clear and final answer...
I know that it's in the C++11 standard and that current GCC version behave this way, but does VC2010 currently guarantees thread-safety of a local static variable initialization?
i.e.: Is this thread-safe with VC2010?
static S& getInstance()
{
static S instance;
return instance;
}
...And if not, what is the current best practice to get a thread-safe singleton implementation in C++ with VC2010?
EDIT: As pointed out by Chris Betti's answer, VC2010 doesn't implement thread-safeness of local static variable init.
From Visual Studio 2010's documentation on Static:
Assigning a value to a static local variable in a multithreaded application is not thread safe and we do not recommend it as a programming practice.
The second part of your question has some good existing answers.
Updated Nov 22, 2015:
Others have verified, specifically, that static initialization is not thread safe either (see comment and other answer).
User squelart on VS2015:
you may want to add that VS2015 finally gets it right: https://msdn.microsoft.com/en-au/library/hh567368.aspx#concurrencytable ("Magic statics")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With