В какой-то момент я помню, что читал, что потоки нельзя безопасно создавать до первой строки main (), потому что компиляторы вставляют специальный код, чтобы заставить работу потоков работать во время статической инициализации. Так что, если у вас есть глобальный объект, который создает поток при создании, ваша программа может завершиться сбоем. Но сейчас я не могу найти оригинальную статью, и мне любопытно, насколько это сильное ограничение - действительно ли оно строго по стандарту? Это правда на большинстве компиляторов? Останется ли это в C ++ 0x? Возможно ли, чтобы компилятор, соответствующий стандартам, сам выполнял статическую инициализацию многопоточность? (например, обнаружение, что два глобальных объекта не касаются друг друга, и инициализация их в отдельных потоках для ускорения запуска программы)
Редактировать: Чтобы уточнить, я пытаюсь хотя бы понять, действительно ли реализации существенно отличаются в этом отношении, или это псевдостандарт. Например, технически стандарт позволяет перетасовывать компоновку элементов, принадлежащих различным спецификаторам доступа (public / protected / и т. Д.). Но никакой компилятор, о котором я знаю, на самом деле не делает этого.