Как создать одноэлементный шаблон проектирования потокобезопасным в стандартном C++? Когда механизм двойной проверки не полностью защищен?
является ли он полностью потокобезопасным в C++ 98, если нет, то как мы можем достичь потокобезопасного синглтона в C++98 ?
MySingleton * GetInstance() { if (m_pOnlyOneInstance == NULL) { EnterCriticalSection(); if (m_pOnlyOneInstance == NULL) // Solution 1 and 2 gaps addressed by moving // critical section block and by re-doing this check! { m_pOnlyOneInstance = new MySingleton(); } LeaveCriticalSection(); } return m_pOnlyOneInstance; }
Что я уже пробовал:
Во многих постах написано,что он не полностью потокобезопасен, в C++11 call_once() решил проблему singleton thread_safe.Как это сделать в C++98?