miembros estaticos estaticas c++ multithreading static member-variables

estaticas - miembros estaticos c++



¿Es la inicialización de variable de miembro estático C++ seguro para subprocesos? (2)

De acuerdo con los siguientes recursos, en C ++ (Especialmente Visual C ++) la inicialización de variables estáticas con ámbito no es segura para subprocesos. Pero, las variables estáticas globales son seguras.

¿Variables estáticas seguras de subprocesos sin mutexing?

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

Entonces, ¿el siguiente código con una variable de miembro estática es seguro para subprocesos?

class TestClass { public: static MyClass m_instance; } Myclass TestClass::m_instance;

¡Gracias por adelantado!


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

Todas las variables estáticas que no son de ámbito de función se construyen antes de main (), mientras que solo hay un subproceso activo. Las variables estáticas de alcance de función se construyen la primera vez que se llama a su función contenedora. La norma no dice nada sobre cómo se construyen las estadísticas de nivel de función cuando se llama a la función en varios subprocesos. Sin embargo, cada implementación con la que he trabajado utiliza un bloqueo alrededor del constructor (con una marca marcada dos veces) para garantizar la seguridad de subprocesos.


Sí(*). Cuando se inicializan las estadísticas globales, solo hay un hilo alrededor y se llama a todos los constructores. Sin embargo, esto no es cierto para las funciones estáticas de la función.

(*) Uno puede hacer que las estadísticas globales no sean seguras para subprocesos creando subprocesos en algunos de los constructores y programando algunas etapas de inicialización en estos subprocesos. En este caso se aplican las reglas de seguridad de hilo habituales.