Название: Синглтон Маерса Thread Safe? Отправлено: CuteBunny от Февраль 28, 2012, 15:23 Здравствуйте!
Недавно понял, что ничего не знаю в принципе об паттерне "одиночка"... Может даже вообще ничего не знаю?... ??? Начал читать кучу книг, особенно заинтересовала "Современное проектирование С++ Александреску"... Взял из пример одиночку Маерса, т.к. мне понравилось, что не надо заботится об утечках, добавил пару своих функций и пытаюсь теперь понять на сколько оно thread-safe... Собрал у себя следующее приложение: Код: #include <Windows.h> Конфигурация компьютера: i5-2300 2.8GHZx2, Win7 x86 Собирал на VS2010. Где-то в интернете я прочитал, что одиночка Маерса не thread-safe и нужно применить синхронизацию при создании экземпляра... В принципе у меня все работает, но правильно ли? Название: Re: Синглтон Маерса Thread Safe? Отправлено: Igors от Февраль 28, 2012, 20:36 Код: static CNetworkLog& getInstance() { Название: Re: Синглтон Маерса Thread Safe? Отправлено: CuteBunny от Февраль 29, 2012, 09:07 Ок, спс.
Почитал еще тут в msdn про статические переменные: Цитировать 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. Раз микрософт не рекомендует так делать, значит так не стоит делать :) Цитировать To cite §3.6 of C++11 "Declaration statement [stmt.dcl]": If control enters the declaration concurrently while the variable is being initialized, the concurrent execution shall wait for completion of the initialization. So if assigning a value to a static local variable is not thread-safe in Visual C++, the compiler is violating the official C++ spec. Хммм, может они в новой версии сделают cl по новому стандарту и тогда можно будет не париться. Название: Re: Синглтон Маерса Thread Safe? Отправлено: niXman от Март 04, 2012, 10:56 Цитировать Синглтон Маерса Thread Safe? нет.три самых популярных синглтона: http://forum.try-catch.ru/topic_1039_0.html Название: Re: Синглтон Маерса Thread Safe? Отправлено: SASA от Март 05, 2012, 12:13 три самых популярных синглтона: http://forum.try-catch.ru/topic_1039_0.html The requested URL /topic_1039_0.html was not found on this server. :'( |