Pregunta

Según siguientes recursos, en C ++ (especialmente Visual C ++) con ámbito de inicialización variable estática no está de subprocesos. Sin embargo, las variables estáticas globales son seguros.

Hilo de seguridad variables estáticas y sin mutexing?

http://blogs.msdn.com/oldnewthing/ archivo / 2004/03/08 / 85901.aspx

Por lo tanto, está siguiendo el código con el miembro variable estática flujos seguros?

class TestClass
{
public:
   static MyClass m_instance;
}

Myclass TestClass::m_instance;

Gracias de antemano!

¿Fue útil?

Solución

Es más una cuestión de variables estáticas función de ámbito frente a cualquier otro tipo de variable estática, en lugar de con ámbito vs globales.

Todas las variables estáticas no la función de alcance se construyen antes de main (), mientras que sólo hay un hilo activo. variables estáticas Función de alcance se construyen por primera vez su función que contiene se llama. La norma no se pronuncia sobre la cuestión de cómo la estática a nivel de función se construyen cuando la función se llama en varios subprocesos. Sin embargo, cada aplicación que he trabajado utiliza un bloqueo en torno al constructor (con un indicador comprobado dos veces) para garantizar la seguridad de rosca.

Otros consejos

Si (*). Cuando se inicializan estática globales, sólo hay un hilo alrededor y todos los constructores son llamados en él. Esto no es cierto para la estática de la función, sin embargo.

(*) Uno puede posiblemente hacer que la estática globales no seguro para subprocesos mediante la creación de roscas en algunos de los constructores y la programación de algunas etapas de inicialización en estos temas. En este caso el hilo habitual se aplican las reglas de seguridad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top