manera segura de obtener una instancia singleton de subprocesos múltiples

Método

DataCenter* DataCenter::getInstance()
{
    static DataCenter instance;
    return &instance;    
}

Método 2

DataCenter* DataCenter::getInstance()
{
    if (!m_instanceFlag)
    {
        m_instance = new DataCenter();
        m_instanceFlag = true;
    }    
    return m_instance;      
}

Estoy trabajando en una programación de subprocesos múltiples y más de un subproceso accederá al DataCenter. Solía tener el método 2 para obtener la instancia de DataCenter y funcionó bien. Pero noté que necesito evitar que la instancia singleton sea llamada por hilos múltiples.

Mi pregunta es primero, ¿realmente necesito proteger la instancia de singleton? ¿O OS hace esto por mí? La segunda pregunta es: ¿es el primer método una forma correcta de obtener la instancia de singleton?

Gracias por adelantado..

Respuestas a la pregunta(6)

Su respuesta a la pregunta