I've been reading about thread-safe singleton patterns here:

<http://en.wikipedia.org/wiki/Singleton_pattern#C.2B.2B_.28using_pthreads.29>

And it says at the bottom that the only safe way is to use pthread\_once - which isn't available on Windows.

Is that the **only** way of guaranteeing thread safe initialisation?

I've read this thread on SO:

[Thread safe lazy construction of a singleton in C++](https://stackoverflow.com/questions/6915/thread-safe-lazy-contruction-of-a-singleton-in-c)

And seems to hint at an atomic OS level swap and compare function, which I assume on Windows is:

<http://msdn.microsoft.com/en-us/library/ms683568.aspx>

Can this do what I want?

**Edit:** I would like lazy initialisation and for there to only ever be one instance of the class.

Someone on another site mentioned using a global inside a namespace (and he described a singleton as an anti-pattern) - how can it be an "anti-pattern"?

**Accepted Answer:**  

I've accepted [Josh's answer](https://stackoverflow.com/questions/164496/how-can-i-create-a-thread-safe-singleton-pattern-in-windows#164640) as I'm using Visual Studio 2008 - NB: For future readers, if you aren't using this compiler (or 2005) - Don't use the accepted answer!!

**Edit:**
**The code works fine except the return statement - I get an error:
error C2440: 'return' : cannot convert from 'volatile Singleton \*' to 'Singleton \*'.
Should I modify the return value to be volatile Singleton \*?**

**Edit:** Apparently const\_cast<> will remove the volatile qualifier. Thanks again to Josh.