En algún momento recuerdo haber leído que los hilos no se pueden crear de manera segura hasta la primera línea de main(), porque los compiladores insertan un código especial para hacer el trabajo de subprocesos que se ejecuta durante el tiempo de inicialización estático. Entonces, si tiene un objeto global que crea un hilo en la construcción, su programa puede bloquearse. Pero ahora no puedo encontrar el artículo original, y tengo curiosidad de cuán fuerte es esta restricción, ¿es estrictamente cierto según el estándar? ¿Es cierto en la mayoría de los compiladores? ¿Seguirá siendo verdad en C++ 0x? ¿Es posible que un compilador conforme a los estándares realice la inicialización estática en sí misma multiproceso? (por ejemplo, detectando que dos objetos globales no se tocan entre sí e inicializándolos en hilos separados para acelerar el inicio del programa)¿Se pueden crear hilos de manera segura durante la inicialización estática?
Editar: Para aclarar, intento al menos tener una idea de si las implementaciones realmente difieren significativamente a este respecto, o si es algo que es pseudo-estándar. Por ejemplo, técnicamente el estándar permite mezclar el diseño de los miembros que pertenecen a diferentes especificadores de acceso (público/protegido/etc.). Pero ningún compilador que conozca realmente hace esto.
"es estrictamente cierto según el estándar" - el estándar C++ 03 no tiene nada que decir sobre el tema de los hilos. Los lugares para mirar en lo que respecta al comportamiento actual serían POSIX (que es, por supuesto, * a * estándar, simplemente no * el * estándar), MSDN, Boost u otros documentos específicos de implementación para el compilador, la plataforma y la API de threading. utilizar. –