Re: atomically thread-safe Meyers singleton impl (fixed)...
"Chris M. Thomasson" <no@spam.invalid> writes:
"Anthony Williams" <anthony.ajw@gmail.com> wrote in message
news:uljzj4hf7.fsf@gmail.com...
"Dmitriy V'jukov" <dvyukov@gmail.com> writes:
On Jul 30, 8:44 am, "Chris Thomasson" <x...@xxx.xxx> wrote:
template<typename T>
struct singleton {
static T* instance() {
static T* volatile this_ptr = NULL;
I think here is a little problem. this_ptr is initialized dynamically,
and this initialization is not thread-safe. So some thread can
overwrite pointer in this_ptr with NULL.
You have to made this_ptr global, not function local, so it will be
initialized with NULL statically before any user code is executed.
Initialization with a constant is still static initialization, even
for function locals.
That's what I always thought. However, perhaps he is thinking along
the lines of:
struct foo {
foo() {
puts("HELLO!");
}
};
void static_me_or_not(int flag) {
if (flag == 666) {
static foo x;
}
}
Constructors are always dynamic initialization.
Anthony
--
Anthony Williams | Just Software Solutions Ltd
Custom Software Development | http://www.justsoftwaresolutions.co.uk
Registered in England, Company Number 5478976.
Registered Office: 15 Carrallack Mews, St Just, Cornwall, TR19 7UL