Я читал здесь о потокобезопасных одноэлементных шаблонах:
http://en.wikipedia.org/wiki/Singleton_pattern#C.2B.2B_.28using_pthreads.29
И внизу написано, что единственный безопасный способ - использовать pthread_once, который недоступен в Windows.
Это единственный способ гарантировать потокобезопасную инициализацию?
Я прочитал эту ветку на SO:
Поточно-безопасное ленивое построение синглтона в C ++
И, похоже, намекает на атомарную функцию подкачки и сравнения на уровне ОС, которая, как я предполагаю, в Windows:
http://msdn.microsoft.com/en-us/library/ms683568.aspx
Могу ли я сделать то, что я хочу?
Изменить: я бы хотел, чтобы инициализация была отложена, и чтобы был только один экземпляр класса.
Кто-то на другом сайте упомянул об использовании глобального внутри пространства имен (и он описал синглтон как анти-шаблон) - как он может быть «анти-шаблоном»?
Принятый ответ:
Я принял Ответ Джоша, поскольку я использую Visual Studio 2008 - NB: для будущих читателей, если вы не используете этот компилятор (или 2005) - не используйте принятый ответ !!
Изменить: Код работает нормально, за исключением оператора return - я получаю сообщение об ошибке: ошибка C2440: «return»: невозможно преобразовать из «volatile Singleton *» в «Singleton *». Следует ли изменить возвращаемое значение на изменчивый синглтон *?
Изменить: Очевидно, const_cast ‹> удалит квалификатор volatile. Еще раз спасибо Джошу.