I thread possono essere creati in modo sicuro durante l'inizializzazione statica?

I thread possono essere creati in modo sicuro durante l'inizializzazione statica?


Ad un certo punto ricordo di aver letto che i thread non possono essere creati in modo sicuro fino alla prima riga di main(), perché i compilatori inseriscono un codice speciale per far funzionare il threading che viene eseguito durante il tempo di inizializzazione statica. Quindi, se hai un oggetto globale che crea un thread in costruzione, il tuo programma potrebbe bloccarsi. Ma ora non riesco a trovare l'articolo originale e sono curioso di sapere quanto sia forte questa restrizione:è rigorosamente vero per lo standard? È vero sulla maggior parte dei compilatori? Rimarrà vero in C++0x? È possibile che un compilatore conforme agli standard esegua l'inizializzazione statica stessa multithread? (ad es. rilevare che due oggetti globali non si toccano e inizializzarli su thread separati per accelerare l'avvio del programma)


Modifica:per chiarire, sto almeno cercando di avere un'idea se le implementazioni differiscono davvero in modo significativo sotto questo aspetto o se si tratta di qualcosa di pseudo-standard. Ad esempio, tecnicamente lo standard consente di mischiare il layout dei membri che appartengono a specificatori di accesso diversi (pubblico/protetto/ecc.). Ma nessun compilatore che conosco lo fa effettivamente.